Метод isShutdown
Метод isShutdown проверяет, был ли
данный исполнитель (ExecutorService)
остановлен. Метод возвращает true,
если исполнитель уже был переведен в состояние
завершения с помощью методов shutdown
или shutdownNow. Если исполнитель
еще работает и не был остановлен, возвращается
false. Параметров метод не принимает.
Важно понимать разницу между методами
isShutdown и isTerminated.
Первый возвращает true сразу после
вызова shutdown или shutdownNow,
даже если задачи еще выполняются. Второй
возвращает true только тогда, когда
все задачи завершены после остановки.
Синтаксис
executor.isShutdown()
Пример
Давайте создадим исполнитель и проверим его состояние до остановки:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newSingleThreadExecutor();
System.out.println(executor.isShutdown());
executor.shutdown();
}
}
Результат выполнения кода:
false
Пример
Теперь давайте проверим состояние после вызова
метода shutdown:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.shutdown();
System.out.println(executor.isShutdown());
}
}
Результат выполнения кода:
true
Пример
Давайте также проверим состояние после вызова
метода shutdownNow:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main
{
public static void main(String[] args)
{
ExecutorService executor = Executors.newSingleThreadExecutor();
executor.shutdownNow();
System.out.println(executor.isShutdown());
}
}
Результат выполнения кода:
true
Пример
Давайте рассмотрим случай, когда исполнитель не был остановлен, но задачи уже завершены:
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(() -> System.out.println("task"));
Thread.sleep(100);
System.out.println(executor.isShutdown());
executor.shutdown();
}
}
Результат выполнения кода:
task
false
Смотрите также
-
класс
ExecutorService,
который управляет пулом потоков -
метод
shutdown,
который останавливает исполнитель -
метод
shutdownNow,
который немедленно останавливает исполнитель -
метод
isTerminated,
который проверяет завершение всех задач