欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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());
    }
}

运行结果:
interrupt()方法会改变线程的状态

可以发现Thread-0线程被中断后,状态就由TIMED_WAITING变成了RUNNABLE,最后再变成TERMINATED。

那为什么Thread-0线程的状态是这样流转的?

看下线程周期流程图就可以知道了:

interrupt()方法会改变线程的状态
可以看到线程如果处于阻塞状态,想要进入终止状态,就只能先转到可运行/运行状态,然后才能走到终止状态。所以Thread-0线程状态才会这样流转。

相关标签: Java并发编程