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

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

Mary-Kate Olsen
リリース: 2024-12-14 04:41:09
オリジナル
337 人が閲覧しました

How to Efficiently Await Task Completion Using ExecutorService?

ExecutorService: タスクの完了を待機

ExecutorService を利用する場合、開発者は、割り当てられたすべてのタスクが完了するまで実行を一時停止する必要が生じる場合があります。この調査では、この目的を達成するための最も簡単なアプローチを検討します。

質問:

コアごとに 1 つずつ、多数の計算タスクを実行し、完了するまで実行を一時停止します。現在の実装では ExecutorService.execute() と es.wait() を利用していますが、IllegalMonitorStateException が発生します。

答え:

ExecutorService.invokeAll() を使用する簡単な解決策です。必要な機能を 1 行で実現します。 code:

List<Callable<Object>> todo = new ArrayList<Callable<Object>>(singleTable.size());

for (DataTable singleTable: uniquePhrases) {
    todo.add(Executors.callable(new ComputeDTask(singleTable))); 
}

List<Future<Object>> answers = es.invokeAll(todo);
ログイン後にコピー

invokeAll() は、すべてのタスクが完了するまで実行を一時停止し、手動シャットダウンと awaitTermination() を不要にします。このアプローチは、複数の実行にわたって再利用可能な ExecutorService インスタンスと連携します。

関連トピックの詳細については、次のリファレンスを参照してください:

  • [SO: Await Thread Completion](URL)
  • [SO: スレッドの戻り値](URL)
  • [SO: invokeAll() および Collectiongt;](URL)
  • [SO: 同期に関する考慮事項](URL)

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート