1

ScheduledExecutorServiceには、フリースレッドを取得できない場合、定期的なタスクが遅延して発生するという問題があるようです。私にとって残念なことに、それが割り当てられている定期的なタスクは、実際にはスケジュールどおりに実行する必要があります。現在、1分に1回の予定ですが、アプリケーションが他のことでビジー状態になっていることが原因で(これが理由だと思います)、5分以内に失敗し、5分が「主要な本番バグ」のしきい値になります。

スレッドバランサーに優先順位を付けるか、制御することでこれを強制するにはどうすればよいですか?

4

1 に答える 1

2

ScheduledExecutorServiceが他のタスクに使用されている場合、またはタスクの実行に1分以上かかる場合は、ScheduledExecutorServiceで使用可能なスレッドの数を増やすだけです。したがって、1つのタスクの実行が終了していなくても、エグゼキュータは新しいタスクを実行できます。

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);

(私はランダムに10個を選びました-タスクを毎分実行し、最大5分間実行できる場合は、エラーの余地があります)

于 2012-08-06T22:19:52.073 に答える