Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

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, обработка ошибок в задачах, тайм-ауты и закрытие пула.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.