Понимание жизненного цикла Java потока и состояния потока в Java являются одними из самых важных тем программирования в многопоточной среде.
В прошлом уроке мы узнали, как работать с Java Thread и познакомились с интерфейсом Runnable.
Состояние Java потока
На диаграмме ниже показаны различные состояния потока в Java. Обратите внимание, что мы можем создать поток в Java и запустить его, но как состояние потока меняется от Runnable в Running и в Blocked зависит от реализации системного планировщика потоков (Thread scheduler) и в Java нет полного контроля над этим процессом. На рисунке 1 показан этот процесс:
Рисунок 1 — Состояния потока в Java
1. Состояние потока: New
Когда мы создаем новый объект класса Thread
, используя оператор new
, то поток находится в состоянии New
. В этом состоянии поток еще не работает.
2. Состояние потока: Runnable
Когда мы вызываем метод start()
созданного объекта Thread
, его состояние изменяется на Runnable
и управление потоком передается Планировщику потоков (Thread scheduler). Ли запустить эту нить мгновенно или сохранить его в работоспособный пула потоков перед запуском, это зависит от реализации ОС в планировщик потоков.
3. Состояние потока: Running
Когда поток будет запущен, его состояние изменится на Running. Планировщик потоков выбирает один поток из своего общего пула потоков и изменяет его состояние на Running. Сразу после этого процессор начинает выполнение этого потока. Во время выполнения состояние потока также может изменится на Runnable, Dead или Blocked.
4. Состояние потока: Blocked или Waiting
Поток может ждать другой поток для завершения своей работы, например, ждать освобождения ресурсов или ввода-вывода. В этом случае его состояние изменяется на Waiting. После того, как ожидание потока закончилось, его состояние изменяется на Runnable и он возвращается общий пул потоков.
5. Состояние потока: Dead
После того, как поток завершает выполнение, его состояние изменяется на Dead, то есть он отработал свое и уже не нужен.
Вот и все, что нужно знать о состояниях потока в Java и работе планировщика потоков (Thread scheduler)