私はScheduledExecutorService.scheduleAtFixedRate
次のような毎日のタスクを実行するために使用します:
executor.scheduleAtFixedRate(task, d, 24L * 3600 * 1000, TimeUnit.MILLISECONDS);
(d
はミリ秒単位の初期遅延です)。
エグゼキュータはExecutors.newSingleThreadScheduledExecutor()
複数のタスクによって作成され、実行されますが、それらはすべて数時間間隔でスケジュールされ、最大で数分かかります。
ScheduledExecutorServiceは精度を保証しないことを知っています。それを取得するには、リアルタイムOSとJVMが必要です。しかし、それは私の仕事の要件ではありません。
JDK1.7.0_03を使用しているWindows2003Serverでは、タスクが1日あたり約10秒遅れていることに気付きました。これは、月に約5分になります。これは、私のアプリケーションでは許容範囲です。タスクを特定の現地時間に実行したいので、とにかく再スケジュールを実装する必要があります。そのため、DSTを自分で処理する必要があります。サービスは長期間実行されます-再起動せずに半年はそれほど珍しいことではありません。
それでも、ほとんどアイドル状態のシステムでは、10秒/日の不正確さはかなり高いと思います。さらに悪い動作に備える必要があるのではないかと思います。
だから私の質問はあなたの経験についてscheduleAtFixedRate
です。10秒/日は正常ですか?他の環境で精度が向上するのでしょうか、それとも低下するのでしょうか(お客様はLinuxおよびSolarisサーバーも使用しています)。それとも、10秒は、私たちの環境に何か問題があることを示していますか?