Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中线程的中断状态标志在哪里,为什么interrupt()方法是静态的_Java_Interrupt - Fatal编程技术网

java中线程的中断状态标志在哪里,为什么interrupt()方法是静态的

java中线程的中断状态标志在哪里,为什么interrupt()方法是静态的,java,interrupt,Java,Interrupt,第一个问题是:中断状态标志假定的中断()方法在哪里: 第二个问题是: 为什么被中断()?和isInterrupted非静态?语言规范没有规定如何实现中断状态。在hotspot中,您可以在JVM代码中找到实现细节。例如,对于linux,大约在第4140行 中断是静态的,因为它检查当前线程状态。换句话说,如果在主线程上调用new Thread().interrupted(),则在主线程被中断时,而不是在新线程被中断时,将得到true isInterrupted检查调用该方法的线程是否中断。在上面的示

第一个问题是:中断状态标志假定的中断()方法在哪里:

第二个问题是:
为什么被中断()?和isInterrupted非静态?

语言规范没有规定如何实现中断状态。在hotspot中,您可以在JVM代码中找到实现细节。例如,对于linux,大约在第4140行

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

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

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

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