ExecutorService awaitTermination застревает - PullRequest
19 голосов
/ 14 августа 2011

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

28 голосов
/ 14 августа 2011

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

источник: javadoc

2 голосов
/ 14 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...