Java : InterruptedException (割込み例外) - API使用例

InterruptedException (Java SE 17 & JDK 17) の使用例まとめです。
だいたいのメソッドを網羅済みです。
API仕様のおともにどうぞ。


概要

クラス構成

スレッドA、スレッドBがあるとします。

スレッドAが待ち(wati)状態のときに、スレッドBからスレッドAに対して割り込み(interrupt)すると、スレッドAでInterruptedExceptionが発生して待ち状態が解除されます。

シーケンス

InterruptedExceptionが発生すると、割込みステータスはクリアされます。
その点はご注意ください。

final var thread = new Thread(() -> {
    System.out.println("task start");
    final var current = Thread.currentThread();

    try {
        System.out.println("isInterrupted 1 : " + current.isInterrupted());

        // 割込み発生までループします。
        while (!current.isInterrupted()) {
            Thread.onSpinWait();
        }

        System.out.println("isInterrupted 2 : " + current.isInterrupted());

        // 割込み発生中なので、sleepは即座にInterruptedExceptionを発生させます。
        Thread.sleep(1000);

    } catch (InterruptedException e) {
        System.out.println("InterruptedException!");
        System.out.println("isInterrupted 3 : " + current.isInterrupted());
    } finally {
        System.out.println("task end");
    }
});

System.out.println("-- start --");
thread.start();

Thread.sleep(500);

thread.interrupt();
System.out.println("-- interrupt --");

thread.join();
System.out.println("-- join --");

// 結果
// ↓
//-- start --
//task start
//isInterrupted 1 : false
//-- interrupt --
//isInterrupted 2 : true
//InterruptedException!
//isInterrupted 3 : false
//task end
//-- join --

コンストラクタ

InterruptedException ()

詳細メッセージなしでInterruptedExceptionを構築します。

final var e = new InterruptedException();
System.out.println(e); // java.lang.InterruptedException

InterruptedException (String s)

指定された詳細メッセージを持つInterruptedExceptionを構築します。

final var e = new InterruptedException("abcd");
System.out.println(e); // java.lang.InterruptedException: abcd

Throwableで宣言されたメソッド

addSuppressed, fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, getSuppressed, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString

Java API 使用例 : Throwable」をご参照ください。


関連記事

スレッド関連

例外関連

ページの先頭へ