我正在使用Java进行中断实验,观察到如果我中断一个线程,并且当线程状态从RUNNABLE更改为TERMINATED时不重置它的中断状态,那么中断变量会被重置(中断变为false)。
Main.java
public class Main {
public static void main(String[] args) {
try {
t1 t1 = new t1();
t1.start();
Thread.sleep(10);
t1.interrupt();
System.out.println("t1.isInterrupted: " + t1.isInterrupted() + " t1.state: " + t1.getState());
Thread.sleep(20);
System.out.println("t1.isInterrupted: " + t1.isInterrupted() + " t1.state: " + t1.getState());
} catch (Exception exc) {
System.out.println("Exception: " + exc);
}
}
}
t1.java
public class t1 extends Thread {
@Override
public void run() {
while (!Thread.currentThread().isInterrupted()) {
System.out.println("Processing");
}
System.out.println("Execution completed - interrupt status: " + Thread.currentThread().isInterrupted());
}
}
Main.java的输出(Centos 7 64位,Java 1.8.0_66-b17)
- 处理中
处理中
处理中
t1.isInterrupted: true t1.state: RUNNABLE
执行完成 - 中断状态:true
t1.isInterrupted: false t1.state: TERMINATED
我的问题是谁或什么将此标志重置为false以及为什么?Thread类有一个私有的exit方法,它将一些内部变量设置为null,但我找不到任何重置中断标志的东西。如果有人能解决这个问题,我将不胜感激...
附言:这里是一个链接到GIST的链接。