Ответ
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()) и корректно реагировать.