Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpThSte 166 of 322 menu
◀ ▶

Состояние потока в Java

Поток в JVM не просто «работает или нет». У него есть состояние из перечисления Thread.State: новый, runnable, ожидание, блокировка, сон, завершён. Метод getState() показывает снимок в текущий момент.

После new Thread(...) объект в состоянии NEW. После start() поток становится RUNNABLE (готов или уже выполняется на ядре). Когда run закончился, состояние TERMINATED.

Сразу после создания и после завершения:

public class Main { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(() -> { }); System.out.println(t.getState()); t.start(); t.join(); System.out.println(t.getState()); } }

Первая строка - NEW, вторая после join - TERMINATED. Между стартом и join состояние обычно RUNNABLE, но поймать его без паузы сложно на короткой задаче.

Состояние TIMED_WAITING во время сна:

public class Main { public static void main(String[] args) throws InterruptedException { Thread sleeper = new Thread(() -> { try { Thread.sleep(500); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } }); sleeper.start(); Thread.sleep(50); System.out.println(sleeper.getState()); sleeper.join(); } }

Короткая пауза в main даёт worker время уйти в sleep. Часто увидите TIMED_WAITING. Состояние WAITING появляется, когда поток ждёт без таймера, например на join или wait.

Проверка, жив ли поток, через isAlive():

public class Main { public static void main(String[] args) throws InterruptedException { Thread t = new Thread(() -> System.out.println("run")); System.out.println(t.isAlive()); t.start(); System.out.println(t.isAlive()); t.join(); System.out.println(t.isAlive()); } }

Создайте поток с sleep(300), запустите его, через 20 мс выведите getState(), дождитесь join и снова выведите состояние. Сравните два значения.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить