РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
717 of 1163 menu

Класс InterruptedException

Класс InterruptedException - это проверяемое исключение из пакета java.lang, которое возникает, когда поток находится в состоянии ожидания, сна или блокировки, и другой поток прерывает его с помощью метода interrupt. Это исключение наследуется от класса Exception и относится к категории проверяемых исключений, поэтому его необходимо либо обработать в блоке try-catch, либо объявить в сигнатуре метода с помощью ключевого слова throws.

Методы, которые могут вызвать это исключение: Thread.sleep, Object.wait, Thread.join, Lock.lockInterruptibly и другие блокирующие операции. Когда поток прерывается, флаг прерывания сбрасывается, и выбрасывается InterruptedException.

Синтаксис

try { Thread.sleep(1000); } catch (InterruptedException e) { // handle interruption }

Пример

Давайте создадим поток, который засыпает на 10 секунд, и прервём его из главного потока:

public class Main { public static void main(String[] args) { Thread worker = new Thread(() -> { try { System.out.println("Worker started"); Thread.sleep(10000); System.out.println("Worker finished"); } catch (InterruptedException e) { System.out.println("Worker interrupted"); } }); worker.start(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } worker.interrupt(); } }

Результат выполнения кода:

"Worker started" "Worker interrupted"

Пример

Давайте покажем, как пробросить исключение InterruptedException выше по стеку с помощью ключевого слова throws:

public class Main { public static void main(String[] args) { try { doWork(); } catch (InterruptedException e) { System.out.println("Caught: " + e.getMessage()); } } public static void doWork() throws InterruptedException { System.out.println("Working..."); Thread.sleep(5000); System.out.println("Done"); } }

Результат выполнения кода:

"Working..." "Caught: sleep interrupted"

Пример

Давайте восстановим флаг прерывания после перехвата исключения с помощью метода interrupt, чтобы вышестоящий код знал о прерывании:

public class Main { public static void main(String[] args) { Thread worker = new Thread(() -> { try { Thread.sleep(10000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); System.out.println("Interrupt flag restored: " + Thread.currentThread().isInterrupted()); } }); worker.start(); worker.interrupt(); } }

Результат выполнения кода:

"Interrupt flag restored: true"

Смотрите также

  • ключевое слово throws,
    которое объявляет проверяемое исключение
  • ключевое слово throw,
    которое выбрасывает исключение вручную
  • конструкция try-catch,
    которая обрабатывает исключения
  • класс Exception,
    базовый класс для проверяемых исключений
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить