ホームページ >Java >&#&チュートリアル >ExecutorService タスクの完了を効率的に待つ方法

ExecutorService タスクの完了を効率的に待つ方法

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 06:27:45438ブラウズ

How to Efficiently Wait for ExecutorService Task Completion?

ExecutorService Waiting for Task Completion

マルチスレッド アプリケーションでは、ExecutorService に送信されたすべてのタスクが完了するまで待機する必要があることがよくあります。先に進む前に。ポーリングやグローバル タスク カウンターの常時チェックなどの粗雑な手法は存在しますが、より効率的で洗練されたソリューションも利用できます。

awaitTermination() および shutdown()

推奨されるアプローチExecutorService の awaitTermination() メソッドの使用が含まれます。タイムアウトを指定したり、スレッドが終了するまで無期限に待機したりできます。その仕組みは次のとおりです。

// Create an ExecutorService instance
ExecutorService taskExecutor = Executors.newFixedThreadPool(4);

// Submit tasks as needed
while(...) {
  taskExecutor.execute(new MyTask());
}

// Shutdown the ExecutorService to prevent new tasks from being submitted
taskExecutor.shutdown();

// Wait for threads to complete
try {
  taskExecutor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
} catch (InterruptedException e) {
  // Handle any interruptions
}

このメソッドは、スレッドが完了するかタイムアウトに達するまでブロックします。一部のタスクが完了していない場合でも、特定の時間が経過した後にアプリケーションを続行する場合は、有限のタイムアウトを指定することもできます。

以上がExecutorService タスクの完了を効率的に待つ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。