【发布时间】:2013-01-06 13:27:11
【问题描述】:
java中有两个代码块。
第一块:
@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
第二座:
@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()后阻止打印interrupt:true而阻止第二个打印? - 调用interrupt()后JVM会做什么?
谢谢!
PS:第三块:
@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
【问题讨论】:
-
在线程启动之前中断线程是无操作的。
标签: java multithreading jvm