栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JavaExecutorService,如何等待所有任务完成

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaExecutorService,如何等待所有任务完成

最简单的方法是使用

ExecutorService.invokeAll()
单行代码执行所需的操作。用你的话来说,你需要修改或包装
ComputeDTask
以实现
Callable<>
,这可以给你带来更大的灵活性。可能在你的应用中实现的有意义的实现
Callable.call()
,但是如果不使用,则可以通过以下方式包装它
Executors.callable()

ExecutorService es = Executors.newFixedThreadPool(2);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()
如果合适,你可以使用的超时版本。在此示例中,answers将包含一堆
Futures
,这些s将返回空值(请参阅的定义
Executors.callable()
。可能要做的是稍微重构,以便你可以返回有用的答案或对基础的引用
ComputeDTask
,但是我可以从你的例子中看不出来。

如果不清楚,请注意,

invokeAll()
直到完成所有任务后该操作才会返回。(即,如果需要,将报告
Future
answers
集合中的所有
s .isDone()
。)这避免了所有手动关闭,awaitTermination等…,并允许你
ExecutorService
根据需要在多个循环中整齐地重用此方法。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/381490.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号