ExecutorService を使用してすべてのスレッドが終了するのを待つ方法は? 質問する

ExecutorService を使用してすべてのスレッドが終了するのを待つ方法は? 質問する

次のようなタスクを一度に 4 つ実行する必要があります。

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
    taskExecutor.execute(new MyTask());
}
//...wait for completion somehow

すべてが完了したら通知を受け取るにはどうすればよいですか? 今のところ、グローバル タスク カウンターを設定し、各タスクの終了時にカウンターを減らし、無限ループでこのカウンターが 0 になるまで監視するか、Future のリストを取得し、無限ループでそれらすべてに対して isDone を監視する以外に、良い方法は思いつきません。無限ループを伴わない、より良い解決策は何でしょうか?

ありがとう。

ベストアンサー1

基本的にはExecutorServiceあなたが呼ぶshutdown()その後awaitTermination():

ExecutorService taskExecutor = Executors.newFixedThreadPool(4);
while(...) {
  taskExecutor.execute(new MyTask());
}
taskExecutor.shutdown();
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  ...
}

おすすめ記事