22

我用 制作了一个固定大小的线程池Executors.newFixedThreadPool(2),并执行了 10 个Runnable对象。我设置断点并跟踪执行。但是,fixedSizeThreadPool.awaitTermination()即使所有任务都已完成,也不允许我继续。

基本上:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; ++i) {
    fixedSizeThreadPool.execute(myRunables[i]);
}
try {
    fixedSizeThreadPool.awaitTermination(timeout, timeoutUnits);
} catch (Exception e) { }
System.out.println("done!");

但这总是卡在awaitTermination. 怎么了?

4

2 回答 2

32

正如彼得指出的,shutdown()必须先调用。

来源:javadoc

于 2011-08-14T19:28:51.760 回答
2

您也可以使用ExecutorService#invokeAll。它会阻塞,直到所有任务完成或达到超时。shutdown如果您的 ExecutorService 包含其他任务以及特别是计划任务,则它比 using 更清洁。这些也会受到调用的影响shutdown

于 2011-08-14T19:41:03.453 回答