Java実装遅延実行コード

2146 ワード

Java実装遅延実行コード
Javaプログラムでは、それらの操作に遅延や一時停止を追加するのが一般的です.これは、他のタスクが実行シーンを完了するまでタスクを一時停止するのに役立ちます.本論文では,遅延実行を実現する2つの方法を提供する.
1.スレッドベースの方法
Javaクエリーが実行されると、オペレーティングシステムに少なくとも1つのスレッドが含まれているプロセスが生成されます.プライマリ・スレッドはクエリーの実行を担当します.また、Javaはマルチスレッドをサポートしており、プログラムは新しいスレッドを作成してメインスレッドと並列または非同期で実行することができます.
1.1.Thread.sleepの使用
Javaの高速で信頼性の低い一時停止方法は、現在のスレッドを一定時間スリープさせることです.Thread.sleep(milliseconds)を使用して、次の操作を行います.
try {
    Thread.sleep(secondsToSleep * 1000);
} catch (InterruptedException ie) {
    Thread.currentThread().interrupt();
}

try...catchを用いてsleep法の異常をキャプチャすることは良い実践方法である.上記の例では、InterruptedExceptionをキャプチャし、後続の処理のために現在のスレッドを中断することを示します.これはマルチスレッドプログラムで非常に重要です.
1.2.TimeUnit.sleepの使用
TimeUnit.XXX.sleep(y)を使用すると、より読みやすくなります.xxxはSECONDS、MINUTESなどのスリープ時間単位で、yは数です.その背後にはThread.sleepが使用されています.例を見てください.
try {
    TimeUnit.SECONDS.sleep(secondsToSleep);
} catch (InterruptedException ie) {
    Thread.currentThread().interrupt();
}

スレッドベースの使用にはいくつかの欠点があります.
  • スリープ時間は、特にミリ秒、ナノ秒などの時間増分が小さい場合に不正確である.
  • ループ内部で使用すると、他のコードの実行によって複数回の反復後の実行時間が不正確になるため、スリープはループ反復間でわずかにドリフトする.

  • 2.ExecutorServiceベースのアプローチ
    JavaはScheduledExecutorServiceインタフェースを提供し、より強力で正確なソリューションです.インタフェースは、指定された遅延または一定の時間間隔後にコードを1回実行するように手配することができる.遅延後にコードを実行するには、scheduleメソッドを使用します.
    ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
    executorService.schedule(Classname::someTask, delayInSeconds, TimeUnit.SECONDS);
    

    Classname::someTaskセクションでは、特定のメソッドの実行遅延を指定します.
  • someTaskは実行メソッドの名前
  • である.
  • ClassnameはsomeTaskメソッドを含むクラス名
  • である.
    一定時間間隔で実行され、scheduleAtFixedRateを使用できます.
    ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
     
    executorService.scheduleAtFixedRate(Classname::someTask, 0, delayInSeconds, TimeUnit.SECONDS);
    

    これはsomeTaskメソッドを繰り返し呼び出し、呼び出しのたびにdelayInSeconds秒を一時停止します.より多くのタイミングオプションを許可するほか、ScheduledExecutorServiceメソッドはドリフトの問題を防止できるため、より正確な時間間隔を生成することができます.
    3.まとめ
    本論文では,Javaプログラムにおける2つの方法による遅延の実現について論じる.