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 サイトの他の関連記事を参照してください。