Поток пытается войти в synchronized-блок, занятый другим потоком. В каком состоянии он находится?
BLOCKED — ожидание входа в занятый монитор synchronized. Шесть состояний: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED.
- WAITING — wait(), join(), LockSupport.park() без таймаута
- TIMED_WAITING — sleep, wait и join с таймаутом
- Ожидание ReentrantLock — WAITING, а не BLOCKED: он построен на park
А ещё Поток, висящий на чтении из сокета, — RUNNABLE
Подробно
Шесть состояний: NEW (создан, не запущен), RUNNABLE, BLOCKED (ждёт входа в монитор), WAITING (wait/join/park без таймаута), TIMED_WAITING (sleep, wait с таймаутом), TERMINATED. Важная деталь, которую часто не знают: Java не выделяет отдельного состояния для блокировки на вводе-выводе — поток, висящий на чтении из сокета, числится RUNNABLE.
Что хотят услышать
- Правильный ответ и перечень состояний.
- Различие BLOCKED и WAITING.
- Что поток на вводе-выводе формально RUNNABLE.
Частые ошибки
- Путать BLOCKED (монитор) и WAITING (wait/join/park).
- Считать, что поток в ожидании ввода-вывода не RUNNABLE.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓BLOCKED
- ✗WAITING
- ✗TIMED_WAITING
- ✗RUNNABLE
Что спросят дальше
- Чем wait() отличается от sleep() по владению монитором?
- Как поток выходит из WAITING?
Разбор темы
- Потоки: создание, состояния и отмена
Thread и Runnable, стоимость платформенных потоков, состояния жизненного цикла, кооперативное прерывание и daemon-потоки.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.