РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1053 of 1163 menu

Метод shutdown

Метод shutdown класса ExecutorService запускает упорядоченное завершение работы пула потоков. После вызова этого метода пул перестает принимать новые задачи, но уже запущенные задачи продолжают выполняться до своего завершения. Метод не принимает параметров и не возвращает результата. Важно понимать, что shutdown не блокирует текущий поток - он лишь сигнализирует пулу о необходимости завершиться.

Чтобы дождаться фактического завершения всех задач, после вызова shutdown обычно вызывают метод awaitTermination. Если нужно немедленно прервать выполняющиеся задачи, используют shutdownNow.

Синтаксис

executor.shutdown()

Пример

Давайте создадим пул из двух потоков, отправим в него несколько задач, а затем вызовем shutdown и дождемся завершения всех задач:

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(2); for (int i = 1; i <= 3; i++) { final int taskId = i; executor.execute(() -> { System.out.println("Task " + taskId + " started"); try { Thread.sleep(500); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } System.out.println("Task " + taskId + " finished"); }); } executor.shutdown(); executor.awaitTermination(5, TimeUnit.SECONDS); System.out.println("Executor is terminated: " + executor.isTerminated()); } }

Результат выполнения кода:

Task 1 started Task 2 started Task 1 finished Task 2 finished Task 3 started Task 3 finished Executor is terminated: true

Пример

Давайте проверим, что после вызова shutdown пул больше не принимает новые задачи:

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.RejectedExecutionException; public class Main { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(() -> System.out.println("First task")); executor.shutdown(); try { executor.execute(() -> System.out.println("Second task")); } catch (RejectedExecutionException e) { System.out.println("New task rejected: " + e.getClass().getSimpleName()); } System.out.println("isShutdown: " + executor.isShutdown()); } }

Результат выполнения кода:

First task New task rejected: RejectedExecutionException isShutdown: true

Смотрите также

  • класс ExecutorService,
    который управляет пулом потоков
  • метод shutdownNow,
    который немедленно прерывает выполнение задач
  • метод awaitTermination,
    который ожидает завершения всех задач
  • метод isTerminated,
    который проверяет, завершился ли пул полностью
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить