ホームページ >Java >&#&チュートリアル >Java While ループで正確な遅延と一時停止を実装するにはどうすればよいですか?

Java While ループで正確な遅延と一時停止を実装するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-08 21:43:16552ブラウズ

How Can I Implement Precise Delays and Pauses in Java While Loops?

Java での遅延の実装

Java では、プログラム内に遅延や一時停止を導入する方法がいくつかあります。特定の待機時間が必要な while ループでこの機能のニーズに対処するために、利用可能なオプションとそれぞれの利点を調べてみましょう。

1. TimeUnit の使用

単純な待機要件のために、java.util.concurrent.TimeUnit は専用のメソッドを提供します。 1 秒間一時停止するには、TimeUnit.SECONDS.sleep(1) など、希望の時間単位と期間を指定できます。同様に、1 分間の遅延には TimeUnit.MINUTES.sleep(1) を使用できます。

2. ScheduledExecutorService とscheduleAtFixedRate/scheduleWithFixedDelay

より正確で構成可能な遅延については、ScheduledExecutorService の使用を検討してください。 scheduleAtFixedRate() メソッドを使用すると、過去の実行に関係なく、指定した間隔でタスクを実行できます。一方、scheduleWithFixedDelay() は、前のタスクの完了時間に基づいて遅延を導入します。

たとえば、ScheduledExecutorService を使用してタスクを毎秒実行するには、次のコードを使用できます。

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class DelayExample {
    public static void main(String[] args) {
        ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.scheduleAtFixedRate(App::myTask, 0, 1, TimeUnit.SECONDS);
    }

    private static void myTask() {
        System.out.println("Running");
    }
}

。ドリフトと柔軟性に関する考慮事項

TimeUnit.sleep() は単純そうに見えますが、実際の実行時間とスリープ期間はわずかに異なる可能性があるため、時間の経過とともにドリフトが発生する可能性があります。さらに、タスクの正確なタイミングを制御するという点で柔軟性に欠けます。

。正確なスケジューリングに推奨される代替手段

より正確で遅延を制御するには、ScheduledExecutorService を強くお勧めします。これにより、固定レートと固定遅延の両方で正確なスケジューリングが可能になり、タイミング精度が重要なシナリオに適しています。

以上がJava While ループで正確な遅延と一時停止を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。