Что такое InterruptedException в Java?

«Что такое InterruptedException в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

InterruptedException — это проверяемое исключение (checked exception), которое выбрасывается, когда поток прерывается во время выполнения блокирующей операции (например, Thread.sleep(), Object.wait(), Thread.join()).

Основное назначение:

  • Сигнализировать потоку о запросе на прерывание (вызов thread.interrupt()).
  • Предоставить возможность корректно завершить работу и освободить ресурсы.

Пример корректной обработки:

try {
    Thread.sleep(5000); // Блокирующая операция
} catch (InterruptedException e) {
    // 1. Восстанавливаем статус прерывания (важно для вышестоящего кода)
    Thread.currentThread().interrupt();
    // 2. Завершаем работу метода/потока
    return;
}

Ключевые практики:

  • Не игнорируйте исключение. Пустой catch-блок может привести к "зависанию" потока.
  • Всегда восстанавливайте статус прерывания через Thread.currentThread().interrupt(), если не планируете немедленно завершать поток. Это позволяет вышестоящему коду узнать о прерывании.
  • Прерывание — это кооперативный механизм. Поток должен сам проверять свой статус (Thread.interrupted()) и корректно реагировать.