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
.