ExecutorService 等待任务完成
在多线程应用程序中,通常需要等待提交给 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中文网其他相关文章!