В Java потоки могут находиться в различных состояниях, в зависимости от того, что происходит внутри потока и внешних факторов.
Рассмотрим основные состояния потоков в Java:
- NEW: поток был создан, но еще не запущен.
- RUNNABLE: поток запущен и готов к выполнению, но еще не получил процессорное время.
- BLOCKED: поток остановлен, поскольку ожидает освобождения локированного монитора.
- WAITING: поток остановлен и ожидает события, которое может быть вызвано другим потоком.
- TIMED_WAITING: поток остановлен и ожидает события, которое может быть вызвано только после таймаута.
- TERMINATED: поток завершен и больше не выполняется.
Примеры перевода потока из одного состояния в другое:
- NEW -> RUNNABLE: поток становится готовым к выполнению при запуске с помощью метода start().
- RUNNABLE -> WAITING: поток вызывает метод wait(), чтобы ожидать события.
- RUNNABLE -> TIMED_WAITING: поток вызывает метод sleep() или wait(timeout) и ожидает события с таймаутом.
- RUNNABLE -> BLOCKED: поток пытается войти в секцию кода, защищенную заблокированным монитором.
- RUNNABLE -> TERMINATED: поток завершает свое выполнение, когда выполняется последний оператор в методе run().
1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions
Tелеграмм канал: https://t.me/DEBAGanov
Мое резюме: https://github.com/DEBAGanov