私は可変時間に非同期に10のタスクを起動しなければなりません。次の日に近づくほど、これらの10のタスクをさらに繰り返さなければなりません。可変時間にスレッド(タスク)のグループをスケジュールするにはどうすればよいですか?
私の質問は、どうすればいいですか?私はどのエグゼクティブを使うべきですか?メモリを管理する最善の方法は何ですか?
私はExecutors.newScheduledThreadPoolを使用して、10回のタスクでスレッドプールプロセスを開始することができると考えました。この問題は、以前のタスクグループが完了していなくても(新しいスレッドプールが毎回トリガーされる)、新しいタスクセットを起動する必要があります。
また、プロセスレジストリのソートを使用して、起動されたさまざまなプロセスを管理することも考えています。レジストリ以外のプロセスが使用されていない場合は、レジストリを停止することができます。
そして、タスクが完了するたびに、私はrunnablesをフラッシュし、スレッドプールを停止することを考えました。それは全体的に良い解決策ですか?
発生する可能性がある問題は、メモリをスレッドプールで飽和させることです。たぶんスレッドプールに時間制限を入れますか?
ExecutorService ex = Executors.newFixedThreadPool(1);
final ExecutorService workersPool = Executors.newCachedThreadPool();
ex.submit(new Runnable() {
public void run() {
try {
do {
// determine if it's time to start workers
if (timeToStartWorkers()) {
workersPool.submit(new Worker(...));
workersPool.submit(new Worker(...));
...
}
// sleep till next time
Thread.sleep(timeTillNextCheck);
}
} catch (InterruptedException e) {
// handle exception
}
}
});
スレッドプールを再作成する必要はありません:
あなたの答えはビクターに感謝します。私はinvokeallメソッドを使用して結果を取得する予定でしたが、私はまだそれを使用できると思います。私は来週それを試してみる。 – Alain