Java には 2 つのコード ブロックがあります。
ブロック 1:
@Test
public void test1() {
System.out.println("interrupt:" + Thread.currentThread().isInterrupted());
Thread.currentThread().interrupt();
System.out.println("interrupt:" + Thread.currentThread().isInterrupted());
}
出力:
interrupt:false
interrupt:true
ブロック 2:
@Test
public void test2() throws InterruptedException {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("running...");
}
});
thread.interrupt();
TimeUnit.SECONDS.sleep(2);
System.out.println("interrupt:" + thread.isInterrupted());
thread.start();
TimeUnit.SECONDS.sleep(2);
System.out.println("interrupt:" + thread.isInterrupted());
}
出力:
interrupt:false
running...
interrupt:false
だから、私の質問:
interrupt:true
呼び出し後に1つの印刷をinterrupt()
ブロックするのに、2つをブロックしないのはなぜですか?- interrupt() を呼び出した後、JVM は何をしますか?
ありがとう!
PS:ブロック 3:
@Test
public void test3() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("running...");
}
});
thread.interrupt();
System.out.println("interrupt:" + thread.isInterrupted());
// thread.start();
//
// thread.interrupt();
//
//
// System.out.println("interrupt:" + thread.isInterrupted());
}
また、出力:interrupt:false