12

あるThread.interrupt()スレッドでが呼び出されると、そのスレッドはどうなりますか?

4

4 に答える 4

33

ターゲットスレッドは「中断」されています。ほとんどの場合、フラグはそのスレッドに設定され、スレッドはそれを(でThread.interrupted())見ることができます。ターゲットスレッドが現在何らかのI/OまたはObject.wait()でブロックされている場合は、それぞれ、InterruptedIOExceptionまたはでウェイクアップされInterruptedExceptionます。

スレッドの中断は、スレッドを微調整するための穏やかな方法です。これは、アサルトライフルでスレッドを撃つようなものとは対照的に、スレッドをきれいに終了する機会を与えるために使用されます。Thread.stop()

于 2010-02-18T15:50:57.927 に答える
2

そのメソッドのJavadocは、どのような状況で何が起こるかを説明しています。

于 2010-02-18T15:48:15.950 に答える
2

これがJDK1.6Javadocです。

このスレッドを中断します。

現在のスレッドがそれ自体に割り込んでいない限り(常に許可されています)、このスレッドのcheckAccessメソッドが呼び出され、SecurityExceptionがスローされる可能性があります。

Objectクラスのwait()、wait(long)、wait(long、int)メソッド、またはjoin()、join(long)、join(long、int)の呼び出しでこのスレッドがブロックされた場合、sleep(long)、またはsleep(long、int)、このクラスのメソッドの場合、その割り込みステータスはクリアされ、InterruptedExceptionを受け取ります。

このスレッドが割り込み可能なチャネルでのI/O操作でブロックされた場合、チャネルは閉じられ、スレッドの割り込みステータスが設定され、スレッドはClosedByInterruptExceptionを受け取ります。

このスレッドがセレクターでブロックされている場合、スレッドの割り込みステータスが設定され、セレクターのウェイクアップメソッドが呼び出されたかのように、おそらくゼロ以外の値で、選択操作からすぐに戻ります。

上記の条件のいずれも当てはまらない場合、このスレッドの割り込みステータスが設定されます。

生きていないスレッドを中断しても、効果がある必要はありません。

于 2010-02-18T15:49:27.367 に答える
0

ZeissSは正しいです、シグナリングはそれを行うための最もクリーンな方法です。割り込み例外をキャッチして、その方法でクリーンアップすることもできます。

于 2010-02-18T15:51:16.290 に答える