私はjava.util.Timer
クラスを使用しています。繰り返しタスクを実行するために使用します。 (例えば毎秒状態をチェックするポーリング機構)。タイマーが予定より遅れた場合
timer.scheduleAtFixedRate(new Poller(), 0, pollingInterval);
問題の場合は、次のとおりです。タイマーが後ろに落ちることができます。例えば毎秒実行する必要がある場合、タスクの実行には2秒かかります。
ドキュメンテーションによれば、タイマーは追いつこうとします。例えば突然、タスクの実行に0.5秒しかかからない場合は、速度が上がります。
まず第一に、私は、を疑問に思って、それは後ろに動いているかどうかを検出するビルトイン方法があります。
しかし、とにかく、キャッチアップの動作を無効にする方法を探しています。 遅れている場合は、私はちょうど2サイクルをスキップしたい。
は(私も同様のタスクのためにScheduledThreadPoolExecutor
を使用しましたそれは、より多くのオプションを持って、そして多分それは解決策になることができます。しかし、それを見つけるために少しあまりにも圧倒的だ。。。)
EDIT:
私はそれについて考えると、私はScheduledThreadPoolExecutor
でそれを行う方法は、タスク実行の間にの間隔を使用してscheduleWithFixedDelay
メソッドを使用することだと思う。
まだ、Timer
で同じことを達成する方法はありますか?