Потоки могут находиться в одном из следующих состояний:
- Новый (New). После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод
start()
. В этом состоянии поток не считается живым. - Работоспособный (Runnable). Поток переходит в состояние Работоспособный, когда вызывается метод
start()
. Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым. - Работающий (Running). Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент.
- Живой, но не работоспособный (Alive, but not runnable). Поток может быть живым, но не работоспособным по нескольким причинам:
- Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод
wait()
. Вызовnotify()
илиnotifyAll()
может перевести поток из состояния Ожидания в состояние Работоспособный. - Сон (Sleeping). Метод
sleep()
переводит поток в состояние Сна на заданный промежуток времени в миллисекундах. - Блокировка (Blocked). Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен.
- Мёртвый (Dead). Поток считается мёртвым, когда его метод
run()
полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван методstart()
.
- Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод