Javaスレッドが終了した時点でinterrupted
かどうかを調べようとしています。これまでのところ、答えは右run()
の終わりをオフに落ちる前に、我々はThread.currentThread().isInterrupted()
がtrue
で見ることができます終了したJavaスレッドの中断状態を取得する方法は?
...「ノー」であるように思われます。
しかしjoin()
がターゲットスレッドをINGの後、私たちは常にfalse
を得る:
import static org.junit.Assert.*;
import org.junit.Test;
public class ThreadDeadInterruptStateTest {
@Test public void test() {
Thread a = new Thread(new Runnable() {
@Override public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
} finally {
// 2x to show that check doesn't reset status
assertTrue("Interrupt status from a 1: ", // pass
Thread.currentThread().isInterrupted());
assertTrue("Interrupt status from a 2: ", // pass
Thread.currentThread().isInterrupted());
}
}});
a.start();
a.interrupt();
try {
a.join();
assertEquals("Thread state", a.getState(),
Thread.State.TERMINATED); // pass
assertTrue("Interrupt status after join: ",
a.isInterrupted()); // Still FAILs :-(
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
public static void main(String[] args) {
new ThreadDeadInterruptStateTest().test();
}
}
タイポが修正されました。まだ逮捕された – DouglasDD
ステータスをクリアする 'join'呼び出しのようです:http://ideone.com/2s0x6H。しかし、その行動が文書化されている場所はわかりません。 –
再投票に投票しましたが、すぐにこれの欺瞞として再閉鎖します:http://stackoverflow.com/questions/10401947/methods-that-clear-the-thread-interrupt-flag –