首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ExecutorService,如何等待所有任务完成

ExecutorService,如何等待所有任务完成
EN

Stack Overflow用户
提问于 2010-07-17 07:12:55
回答 9查看 221K关注 0票数 225

等待ExecutorService的所有任务完成的最简单方法是什么?我的任务主要是计算性的,所以我只想运行大量的作业-每个核心一个。现在,我的设置如下所示:

代码语言:javascript
复制
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {   
    es.execute(new ComputeDTask(singleTable));
}
try{
    es.wait();
} 
catch (InterruptedException e){
    e.printStackTrace();
}

ComputeDTask实现runnable。这看起来可以正确执行任务,但代码在使用IllegalMonitorStateExceptionwait()上崩溃。这很奇怪,因为我玩了一些玩具示例,它似乎起作用了。

uniquePhrases包含数万个元素。我应该使用另一种方法吗?我在寻找尽可能简单的东西。

EN

回答 9

Stack Overflow用户

发布于 2010-07-17 07:16:01

如果要等待所有任务完成,请使用shutdown方法而不是wait。然后使用awaitTermination跟踪它。

此外,您还可以使用Runtime.availableProcessors来获取硬件线程的数量,以便正确地初始化线程池。

票数 65
EN

Stack Overflow用户

发布于 2010-07-17 07:16:41

如果您想等待executor服务完成执行,请调用shutdown(),然后调用awaitTermination(units, unitType),例如awaitTermination(1, MINUTE)。ExecutorService不会在它自己的监视器上阻塞,所以你不能使用wait等。

票数 13
EN

Stack Overflow用户

发布于 2015-01-22 18:20:55

只需使用

代码语言:javascript
复制
latch = new CountDownLatch(noThreads)

在每个线程中

代码语言:javascript
复制
latch.countDown();

以及作为屏障

代码语言:javascript
复制
latch.await();
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3269445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档