ExecutorService awaitTermination застревает

Я сделал пул потоков фиксированного размера с 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 ответов


Как указал Питер,shutdown() должен быть вызван сначала.

источник: javadoc


вы также можете использовать ExecutorService#invokeAll. Он блокирует, пока все задачи не будут выполнены или тайм-аут не будет достигнут. Это немного чище, чем использование shutdown, Если ваш ExecutorService содержит другие задачи, а также особенно запланированные задачи. Они также будут затронуты вызовом shutdown.