1. ホーム
  2. java

[解決済み] Javaで遅延を発生させるには?

2022-03-19 02:15:43

質問

私は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は初めてです。何か提案はありますか?

どのように解決するのですか?

一時停止したい場合は 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");
}