Sobes.tech
Назад к вопросам
Junior — Middle
61

Можешь ли ты перечислить возможные состояния выполнения потока в Java и объяснить их?

Компании, где спрашивали
Формат кодаФормат кода

Ответ от нейросети

sobes.tech AI

В Java поток (Thread) может находиться в следующих состояниях:

  1. NEW (новый) — поток создан, но метод start() ещё не вызван.
  2. RUNNABLE (готовый к выполнению) — поток готов к выполнению и ожидает процессорного времени.
  3. BLOCKED (заблокирован) — поток ожидает монитор (блокировку) для входа в синхронизированный блок или метод.
  4. WAITING (ожидание) — поток ожидает уведомления от другого потока без ограничения по времени (например, вызов wait() без таймаута).
  5. TIMED_WAITING (ожидание с таймаутом) — поток ожидает уведомления или завершения с ограничением по времени (например, sleep(), wait(timeout), join(timeout)).
  6. TERMINATED (завершён) — поток завершил выполнение.

Пример переходов:

Thread t = new Thread(() -> {
    // код потока
});
// Состояние NEW

t.start();
// Переход в RUNNABLE

// Если поток пытается войти в синхронизированный блок, но он занят, он переходит в BLOCKED

// Вызов wait() переводит поток в WAITING

// Вызов sleep(1000) переводит поток в TIMED_WAITING

// После завершения run() поток переходит в TERMINATED

Понимание этих состояний важно для правильного управления потоками и избежания проблем с синхронизацией и производительностью.