6. В каких состояниях может находиться поток?
UNKNOWNПотоки могут находиться в одном из следующих состояний:
- Новый (New). После создания экземпляра потока, он находится в состоянии Новый до тех пор, пока не вызван метод start(). В этом состоянии поток не считается живым.
Thread twoThread = new Thread(\"Yulia\");
- Работоспособный (Runnable). Поток переходит в состояние Работоспособный, когда вызывается метод start(). Поток может перейти в это состояние также из состояния Работающий или из состояния Блокирован. Когда поток находится в этом состоянии, он считается живым.
twoThread.start();
Работающий (Running). Поток переходит из состояния Работоспособный в состояние Работающий, когда Планировщик потоков выбирает его как работающий в данный момент.
Планировщик потоков выбирает поток
Живой, но не работоспособный (Alive, but notrunnable). Поток может быть живым, но неработоспособным по нескольким причинам:
- Ожидание (Waiting). Поток переходит в состояние Ожидания, вызывая метод wait(). Вызов notify() или notifyAll() может перевести поток из состояния Ожидания в состояние Работоспособный.
wait() notify()
- Сон (Sleeping). Метод sleep() переводит поток в состояние Сна на заданный промежуток времени в миллисекундах.
sleep()
- Блокировка (Blocked). Поток может перейти в это состояние, в ожидании ресурса, такого как ввод/вывод или из-за блокировки другого объекта. В этом случае поток переходит в состояние Работоспособный, когда ресурс становится доступен.
- Мёртвый (Dead). Поток считается мёртвым, когдаего метод run() полностью выполнен. Мёртвый поток не может перейти ни в какое другое состояние, даже если для него вызван метод start().
Предыдущий вопрос: 5. Как работают методы wait(), notify() и notifyAll()?
Следующий вопрос: 7. Что такое семафор? Как он реализован в Java?
Все вопросы по теме: список
Все темы: список
Вопросы/замечания/предложения/нашли ошибку: напишите мне