其中是java中线程的中断状态标志,以及为什么interrupt()方法是静态的

时间:2017-04-19 12:01:58

标签: java 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();
        }

第二个问题是: 为什么中断()方法静态?和 isInterlow 不是静态的?

1 个答案:

答案 0 :(得分:1)

语言规范没有规定应如何实施中断状态。在热点中,您可以在JVM代码中找到实现细节。例如,对于linux,它是{41}围绕4140行。{/ p>

interrupted是静态的,因为它会检查当前的线程状态。换句话说,如果你在主线程上调用new Thread().interrupted(),如果主线程被中断,你将会得到真的,而不是新的线程被中断。

isInterrupted检查调用该方法的线程是否被中断。在上面的示例中,它将返回new Thread()的状态,即false。

最后,两种方法之间的一个重要区别是interrupted清除了中断状态。除非您的代码负责给定线程的生命周期,否则通常最好将其重置:

if (Thread.interrupted()) {
  Thread.currentThread().interrupt();
  //etc.
}