2

X 時間ごとに実行される定期的なタスクをスケジュールしたいと考えています。Java で記述されたサービスがあり、サービスが稼働している限り永久に実行される長時間実行されるバックグラウンド スレッドを作成することを考えていました。X時間ごとに1回タスクを実行していることを確認するにはどうすればよいですか? ホストのクロック ドリフトは心配すべき問題ですか? CPUが一生懸命働いていると、クロックティックの周波数が変わる可能性があることを私は知っています。

編集:Spring構成にBeanを追加して、定期的にタスクを実行するスレッドを起動することを考えていました。

4

3 に答える 3

3

Java はjava.util.Timer、バックグラウンド スレッドでタスクを実行するように設計されたクラスを提供します。動作モードの 1 つに「一定間隔での繰り返し実行」があります。正確なニーズに応じて、使用できる固定遅延および固定レートの実行方法があります。

Java 5 では、java.util.concurrent.ScheduledThreadPoolExecutorより柔軟なクラスが追加されましたTimerが、固定遅延および固定レートの実行方法も提供されます。

これらが適切ではないほど正確なタイミングが必要な場合、Java が適切なソリューションであるかどうかはわかりません。リアルタイム システムの領域に入り始めます。この時点で、おそらく他のオプションを探しているはずです。

于 2015-11-13T20:46:53.227 に答える
0

心配な場合は、テスト プロセスを作成し、ターゲット プラットフォームで実行します。実際のプロセスに使用する予定の機能 ( などScheduledExecutorService) を使用して、24 時間ごとにホスト時間を記録するタスクをスケジュールします。ホストが NTP を使用してクロックの同期を維持していない場合は、時間管理 Web サービスを呼び出して、それをログに記録することもできます。数日後、ドリフトを修正する方法が必要かどうかを判断する必要があります。

私の推測では、組み込みスケジューラの精度は 1 日あたり 1 秒未満になると思います。

于 2015-11-14T00:16:47.133 に答える