繰り返されるタスクの期間がその期間よりも長い場合があります (私の場合、これは一度に何時間も発生する可能性があります)。実行に 7 分かかり、10 分ごとに実行されるようにスケジュールされている繰り返しタスクを考えてみてください。
Timer クラスと ScheduledThreadPoolExecutor クラスの両方に、通常このタイプの機能に使用される scheduleAtFixedRate メソッドがあります。しかし、どちらも「遅れると追いつこうとする」という特徴があります。言い換えると、Timer が数回の実行で遅れた場合、Timer は作業のキューを作成します。これは、どのタスクもより長くかからなかった場合に発生したであろう実行回数に追いつくまで、継続的に処理されます。指定された期間。前の実行が完了していない場合、現在の実行をスキップすることで、この動作を回避したいと考えています。
プールされたエグゼキューターの afterExecution メソッドをいじり、遅延を再計算し、新しい遅延でランナブルを再スケジュールすることを含む 1 つの解決策がありますが、より簡単な方法があるかどうか、またはこの機能がどこかの共通ライブラリに既に存在するかどうか疑問に思っていました. 固定期間ではなく固定遅延を使用したスケジューリングについては知っていますが、固定時間にタスクを実行することが重要であるため、これはうまくいきません。私の afterExecution ソリューションよりも簡単なオプションはありますか?