首页 > Java > java教程 > 如何使用ExecutorService高效等待任务完成?

如何使用ExecutorService高效等待任务完成?

Mary-Kate Olsen
发布: 2024-12-14 04:41:09
原创
336 人浏览过

How to Efficiently Await Task Completion Using ExecutorService?

ExecutorService:等待任务完成

利用 ExecutorService 时,开发人员可能需要暂停执行,直到所有分配的任务完成。本次调查探讨了实现这一目标的最简单方法。

问题:

执行大量计算任务,每个核心一个,并暂停执行直至完成。当前实现利用 ExecutorService.execute() 和 es.wait(),但面临 IllegalMonitorStateException。

答案:

使用 ExecutorService.invokeAll(),一个简单的解决方案只需一行即可完成所需的功能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: 等待线程完成](URL)
  • [SO:线程返回值](URL)
  • [SO:invokeAll()和集合>](URL)
  • [SO: 同步注意事项](URL)

以上是如何使用ExecutorService高效等待任务完成?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板