ExecutorService awaitTermination卡住了

时间:2011-08-14 19:22:46

标签: java multithreading executorservice java.util.concurrent

我使用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上。怎么了?

2 个答案:

答案 0 :(得分:27)

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

来源:javadoc

答案 1 :(得分:2)

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