私は Java で何かをしようとしており、while ループで一定秒数待機/遅延させるものが必要です。
while (true) {
if (i == 3) {
i = 0;
}
ceva[i].setSelected(true);
// I need to wait here
ceva[i].setSelected(false);
// I need to wait here
i++;
}
ステップシーケンサーを構築したいです。
Java で遅延を作成するにはどうすればよいでしょうか?
ベストアンサー1
一時停止したい場合は以下を使用しますjava.util.concurrent.TimeUnit
:
TimeUnit.SECONDS.sleep(1);
1秒でも眠るには
TimeUnit.MINUTES.sleep(1);
ちょっと寝る。
これはループなので、ドリフトという固有の問題があります。コードを実行してスリープするたびに、たとえば 1 秒ごとに実行から少しずつドリフトします。これが問題になる場合は、を使用しないでくださいsleep
。
さらに、sleep
制御に関してはあまり柔軟性がありません。
タスクを1秒ごとに実行するか、1秒遅れで実行するには、ScheduledExecutorService
そしてどちらかscheduleAtFixedRate
またはscheduleWithFixedDelay
。
たとえば、メソッドをmyTask
1 秒ごとに実行するには (Java 8):
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}
Java 7 では次のようになります。
public static void main(String[] args) {
final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
myTask();
}
}, 0, 1, TimeUnit.SECONDS);
}
private static void myTask() {
System.out.println("Running");
}