以下の内容はhttps://unageanu.hatenablog.com/entry/20080131/1201769615より取得しました。


Thread#interrupt

Thread#interrupt()でスレッドに割り込みます。

  • (特殊な場合をのぞき、)割り込まれると、スレッドの「割り込まれたフラグ」がtrueになります。
  • 割り込まれた時、Object#wait()Thread#sleep(long)で待ち状態であった場合、InterruptedExceptionが発生します。このときスレッドの「割り込まれたフラグ」はtrueにならず、falseのままになります。
  • その他、interruptible channelSelectorも特殊な動作となるらしい。(詳細はJavaDocを参照)

サンプル

Thread t = Thread.currentThread();

System.out.println( t.isInterrupted() ); // false
System.out.println( Thread.interrupted() ); // false

// 割り込み!
t.interrupt();

System.out.println( t.isInterrupted() ); // true
System.out.println( t.isInterrupted() ); // true / 呼び出し後もフラグは変更されない
System.out.println( Thread.interrupted() ); // true
System.out.println( Thread.interrupted() ); // false / 呼び出し後フラグがfalseにされる。


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


t = new Thread() {
    public void run() {
        Object o = new Object();
        try {
            // waitで待つ
            synchronized( o ) {
                o.wait();
            }
        } catch ( InterruptedException e ) {
            System.out.println( "interrupted!" );
        }
        // wait中に割り込まれた場合、フラグは立たない。
        System.out.println(  Thread.currentThread().isInterrupted() ); // false
        System.out.println( Thread.interrupted() ); // false
    }
};

t.start();
Thread.sleep( 1000 );
t.interrupt();
t.join();

実行結果です。

false
false
true
true
true
false
---
interrupted!
false
false



以上の内容はhttps://unageanu.hatenablog.com/entry/20080131/1201769615より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14