Javaで遅延を作成するにはどうすればいいですか? 質問する

Javaで遅延を作成するにはどうすればいいですか? 質問する

私は 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

たとえば、メソッドをmyTask1 秒ごとに実行するには (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");
}

おすすめ記事