Потоки в Java проходят через шесть различных состояний в течение своего жизненного цикла. Понимание этих состояний необходимо для эффективного управления потоками и контроля параллелизма.
Поток входит в состояние New, когда он создан, но до вызова метода start(). Поток создан, но ещё не начал выполняться.
Когда вызывается start(), поток входит в состояние Runnable. В этом состоянии поток либо прямо сейчас выполняется в JVM, либо готов к выполнению и ждёт, когда планировщик выделит ему процессорное время.
Поток входит в состояние Blocked, когда пытается захватить блокировку монитора, которую в данный момент удерживает другой поток. Поток остаётся заблокированным, пока блокировка не освободится.
В состоянии Waiting поток бесконечно ждёт, пока другой поток выполнит определённое действие. Обычно это происходит, когда поток вызывает:
Object.wait()Thread.join()LockSupport.park()Поток остаётся в ожидании, пока другой поток его явно не уведомит.
Состояние Timed_waiting похоже на Waiting, но с ограниченным временем ожидания. Поток входит в это состояние при вызове:
Thread.sleep(long milliseconds)Object.wait(long timeout)Thread.join(long timeout)Поток автоматически переходит в состояние Runnable, когда время ожидания истекает или его уведомляют.
Поток достигает состояния Terminated, когда завершает выполнение или когда возникает неперехваченное исключение. Завершённый поток нельзя запустить повторно.
Поток в состоянии New уже был запланирован планировщиком потоков JVM и выполняет свой метод run().
Новый — ещё не проверен сообществом
Вы