ExecutorService.shutdown()
Закрывает пул для новых задач и даёт уже принятым доработать.
Доступно с: Java 1.5
Синтаксис
void shutdown()
List<Runnable> shutdownNow()
boolean awaitTermination(long timeout, TimeUnit unit) throws InterruptedExceptionПримеры
Классическое закрытие пула:
void main() throws InterruptedException {
ExecutorService pool = Executors.newFixedThreadPool(2);
var counter = new AtomicInteger();
for (int i = 0; i < 5; i++) {
pool.submit(counter::incrementAndGet);
}
pool.shutdown();
boolean finished = pool.awaitTermination(5, TimeUnit.SECONDS);
IO.println(finished + " " + counter.get());
try {
pool.submit(() -> {});
} catch (RejectedExecutionException e) {
IO.println("rejected after shutdown");
}
}Результат:
true 5
rejected after shutdownПримечания
shutdown() не ждёт — ожидание делает awaitTermination(). shutdownNow() прерывает работающие задачи и возвращает те, что не начались. С Java 19 вместо этой пары проще try-with-resources, который вызывает close().
См. также
- ExecutorService.close() — Закрывает пул и ждёт завершения всех задач; вызывается автоматически в try-with-resources.
- ExecutorService — Сервис, который выполняет задачи в пуле потоков.
- Executors.newFixedThreadPool() — Создаёт пул из заданного числа потоков.
В учебнике
- Пулы потоков и ExecutorService — ExecutorService в Java — пулы потоков, submit, Callable и Future, invokeAll, обработка ошибок в задачах, тайм-ауты и закрытие пула.