interrupt()方法会改变线程的状态
程序员文章站
2022-05-05 21:45:59
...
示例代码:
public class InterruptedChangeStatus {
public static void main(String[] args) throws InterruptedException {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(6);
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + "状态是" + Thread.currentThread().getState());
}
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println(thread1.getName() + "的状态是" + thread1.getState());
//发出信号,中断线程一
thread1.interrupt();
}
});
thread1.start();
thread2.start();
TimeUnit.SECONDS.sleep(6);
System.out.println(thread1.getName() + "状态是" + thread1.getState());
}
}
运行结果:
可以发现Thread-0线程被中断后,状态就由TIMED_WAITING变成了RUNNABLE,最后再变成TERMINATED。
那为什么Thread-0线程的状态是这样流转的?
看下线程周期流程图就可以知道了:
可以看到线程如果处于阻塞状态,想要进入终止状态,就只能先转到可运行/运行状态,然后才能走到终止状态。所以Thread-0线程状态才会这样流转。
上一篇: 多线程基础-守护线程与非守护线程