Back to questions
Формат кода
Junior — Middle
60
Можешь ли ты перечислить возможные состояния выполнения потока в Java и объяснить их?
Companies where asked
Answer from AI
sobes.tech AI
В Java поток (Thread) может находиться в следующих состояниях:
- NEW (новый) — поток создан, но метод
start()ещё не вызван. - RUNNABLE (готовый к выполнению) — поток готов к выполнению и ожидает процессорного времени.
- BLOCKED (заблокирован) — поток ожидает монитор (блокировку) для входа в синхронизированный блок или метод.
- WAITING (ожидание) — поток ожидает уведомления от другого потока без ограничения по времени (например, вызов
wait()без таймаута). - TIMED_WAITING (ожидание с таймаутом) — поток ожидает уведомления или завершения с ограничением по времени (например,
sleep(),wait(timeout),join(timeout)). - TERMINATED (завершён) — поток завершил выполнение.
Пример переходов:
Thread t = new Thread(() -> {
// код потока
});
// Состояние NEW
t.start();
// Переход в RUNNABLE
// Если поток пытается войти в синхронизированный блок, но он занят, он переходит в BLOCKED
// Вызов wait() переводит поток в WAITING
// Вызов sleep(1000) переводит поток в TIMED_WAITING
// После завершения run() поток переходит в TERMINATED
Понимание этих состояний важно для правильного управления потоками и избежания проблем с синхронизацией и производительностью.