第一个问题是:中断状态标志哪个中断()方法应该是sets:
public void interrupt() {
if (this != Thread.currentThread())
checkAccess();
synchronized (blockerLock) {
Interruptible b = blocker;
if (b != null) {
interrupt0(); // Just to set the interrupt flag
b.interrupt(this);
return;
}
}
interrupt0();
}
第二个问题是: 为什么中断()方法静态?和 isInterlow 不是静态的?
答案 0 :(得分:1)
语言规范没有规定应如何实施中断状态。在热点中,您可以在JVM代码中找到实现细节。例如,对于linux,它是{41}围绕4140行。{/ p>
interrupted
是静态的,因为它会检查当前的线程状态。换句话说,如果你在主线程上调用new Thread().interrupted()
,如果主线程被中断,你将会得到真的,而不是新的线程被中断。
isInterrupted
检查调用该方法的线程是否被中断。在上面的示例中,它将返回new Thread()
的状态,即false。
最后,两种方法之间的一个重要区别是interrupted
清除了中断状态。除非您的代码负责给定线程的生命周期,否则通常最好将其重置:
if (Thread.interrupted()) {
Thread.currentThread().interrupt();
//etc.
}