Получить доступ

Поток пытается войти в synchronized-блок, занятый другим потоком. В каком состоянии он находится?

MiddleМногопоточность
Коротко

BLOCKED — ожидание входа в занятый монитор synchronized. Шесть состояний: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED.

  • WAITING — wait(), join(), LockSupport.park() без таймаута
  • TIMED_WAITING — sleep, wait и join с таймаутом
  • Ожидание ReentrantLock — WAITING, а не BLOCKED: он построен на park

А ещё Поток, висящий на чтении из сокета, — RUNNABLE

Так подсказку видит пользователь sotto на живом собеседовании — за пару секунд, пока вы думаете вслух.

Подробно

Шесть состояний: 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?

Разбор темы

Связанные вопросы

Закрытая бета

Подсказки на собеседовании — в реальном времени

sotto слышит вопрос интервьюера и показывает короткий ответ и план, как в блоке «Коротко». Оставьте контакт — пришлём доступ и промокод.

  • Промокод на 2 часа — сверх пробных 30 минут
  • Программа для Windows — скачать сразу, войти — через Яндекс ID или VK ID
  • Прямая связь с разработчиком: что улучшить — сделаем