第一个问题是:interrupt() 方法的中断状态标志在哪里 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();
}
第二个问题是: 为什么 interrupted() 方法是静态?和 isInterrupted 不是静态的?
最佳答案
语言规范没有规定中断状态应该如何实现。在hotspot中,您可以在JVM代码中找到实现细节。例如,对于 Linux,它是 here大约第 4140 行。
interrupted
是静态的,因为它检查当前线程状态。换句话说,如果您在主线程上调用 new Thread().interrupted()
,如果主线程被中断,您将得到 true,而不是新线程被中断。
isInterrupted
检查调用该方法的线程是否被中断。在上面的示例中,它将返回 new Thread()
的状态,即 false。
最后,两种方法的一个重要区别是interrupted
清除中断状态。重置它通常是一个好习惯,除非您的代码负责给定线程的生命周期:
if (Thread.interrupted()) {
Thread.currentThread().interrupt();
//etc.
}
关于java - java中线程的中断状态标志在哪里,为什么interrupted()方法是静态的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43495186/