Назад к вопросам
Junior
80
questionbank
Что такое исключение InterruptedException?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
InterruptedException — это контролируемое (checked) исключение в Java, которое генерируется, когда поток ожидает, спит или занят какой-либо другой активностью, и эта активность прерывается другим потоком.
Основные моменты:
- Наследуется от
Exception. - Указывает, что поток, который был блокирован (например, в методах
wait(),sleep(),join(), в блокирующих операциях ввода-вывода), получил запрос на прерывание. - При выбрасывании этого исключения поток очищает флаг прерывания.
Пример обработки:
// Пример обработки InterruptedException
public class InterruptedTask implements Runnable {
@Override
public void run() {
try {
// Поток выполняет какую-то работу, которая может быть прервана
Thread.sleep(5000); // Пример блокирующей операции
System.out.println("Задача завершена без прерывания.");
} catch (InterruptedException e) {
// Было получено прерывание
System.out.println("Задача прервана.");
// Можно повторно установить флаг прерывания, чтобы
// вышестоящий код знал о прерывании
Thread.currentThread().interrupt();
// Дополнительная логика для выхода или очистки ресурсов
}
}
public static void main(String[] args) {
Thread worker = new Thread(new InterruptedTask());
worker.start();
try {
// Ждем немного, затем прерываем поток
Thread.sleep(1000);
worker.interrupt(); // Прерываем поток
} catch (InterruptedException e) {
e.printStackTrace(); // Обработка исключения main потока
}
}
}
Правильная обработка InterruptedException важна для создания надежных многопоточных приложений. Типичные стратегии:
- Перебросить исключение дальше (
throw new InterruptedException();). - Повторно установить флаг прерывания (
Thread.currentThread().interrupt();) и, возможно, завершить выполнение. - Захватить исключение, выполнить очистку и завершить выполнение потока.