等待ExecutorService
的所有任务完成的最简单方法是什么?我的任务主要是计算性的,所以我只想运行大量的作业-每个核心一个。现在,我的设置如下所示:
ExecutorService es = Executors.newFixedThreadPool(2);
for (DataTable singleTable : uniquePhrases) {
es.execute(new ComputeDTask(singleTable));
}
try{
es.wait();
}
catch (InterruptedException e){
e.printStackTrace();
}
ComputeDTask
实现runnable。这看起来可以正确执行任务,但代码在使用IllegalMonitorStateException
的wait()
上崩溃。这很奇怪,因为我玩了一些玩具示例,它似乎起作用了。
uniquePhrases
包含数万个元素。我应该使用另一种方法吗?我在寻找尽可能简单的东西。
发布于 2010-07-17 07:16:01
如果要等待所有任务完成,请使用shutdown
方法而不是wait
。然后使用awaitTermination
跟踪它。
此外,您还可以使用Runtime.availableProcessors
来获取硬件线程的数量,以便正确地初始化线程池。
发布于 2010-07-17 07:16:41
如果您想等待executor服务完成执行,请调用shutdown()
,然后调用awaitTermination(units, unitType),例如awaitTermination(1, MINUTE)
。ExecutorService不会在它自己的监视器上阻塞,所以你不能使用wait
等。
发布于 2015-01-22 18:20:55
只需使用
latch = new CountDownLatch(noThreads)
在每个线程中
latch.countDown();
以及作为屏障
latch.await();
https://stackoverflow.com/questions/3269445
复制相似问题