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

Метод shutdownNow

Метод shutdownNow принадлежит интерфейсу ExecutorService и запускает немедленное завершение работы пула потоков. В отличие от метода shutdown, который позволяет уже запущенным задачам завершиться, метод shutdownNow пытается прервать выполняющиеся задачи и больше не принимает новые. Параметров метод не принимает. Он возвращает список List<Runnable>, в который попадают задачи, ожидавшие выполнения в очереди и так и не стартовавшие. Если очередь пуста, возвращается пустой список.

Синтаксис

executor.shutdownNow()

Пример

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

import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(() -> { try { Thread.sleep(5000); } catch (InterruptedException e) { System.out.println("task was interrupted"); } }); executor.execute(() -> System.out.println("second task")); executor.execute(() -> System.out.println("third task")); List<Runnable> res = executor.shutdownNow(); System.out.println("not started: " + res.size()); System.out.println("isShutdown: " + executor.isShutdown()); } }

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

"task was interrupted" "not started: 2" "isShutdown: true"

Пример

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

import java.util.List; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class Main { public static void main(String[] args) throws InterruptedException { ExecutorService executor = Executors.newFixedThreadPool(2); for (int i = 1; i <= 5; i++) { final int n = i; executor.submit(() -> System.out.println("task " + n)); } Thread.sleep(100); List<Runnable> res = executor.shutdownNow(); System.out.println("pending: " + res.size()); List<Runnable> res2 = executor.shutdownNow(); System.out.println("second call: " + res2.size()); } }

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

"task 1" "task 2" "task 3" "task 4" "task 5" "pending: 0" "second call: 0"

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

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