请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

sleep遇到中断后线程的状态问题

我所理解的是:子线程在执行sleep()后会进入timed_waiting状态,子线程在timed_waiting状态下被中断后,子线程会抛出异常sleep interrupted,子线程会由timed_waiting变成terminated状态。
但是为什么实际的结果中,子线程的状态是Runnable状态 ,而不是timed_waiting ?

public class InterruptDemo {
    public static void main(String[] args) throws InterruptedException {
        Runnable interruptTask = new Runnable() {
            @Override
            public void run() {
                int i = 0;
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        Thread.sleep(200);  // Timed_waiting状态
                        i++;
                        System.out.println(Thread.currentThread().getName() + " (" +
                                Thread.currentThread().getState() + ") loop " + i);
                    }
                } catch (InterruptedException e) {
                    System.out.println(Thread.currentThread().getName() + " (" +
                            Thread.currentThread().getState() + ") catch InterruptedException.");
                }
            }
        };
        Thread t1 = new Thread(interruptTask, "t1");
        System.out.println(t1.getName() +" ("+t1.getState()+") is new.");
        t1.start();
        System.out.println(t1.getName() +" ("+t1.getState()+") is started.");
        Thread.sleep(300);
        t1.interrupt();  // 中断子线程
        System.out.println(t1.getName() +" ("+t1.getState()+") is interrupted.");
        Thread.sleep(300);
        System.out.println(t1.getName() +" ("+t1.getState()+") is interrupted now.");
    }
}

程序执行结果:
图片描述

正在回答 回答被采纳积分+3

1回答

悟空 2021-08-23 00:58:35

因为那里是已经发生中断并且在执行

System.out.println

的代码了。

要想看到Timed_waiting状态,只能由别的线程去打印它的状态。

0 回复 有任何疑惑可以回复我~
  • 提问者 大魔王kite #1
    在执行sleep()后,子线程处于timed_waiting状态,在被打断后,线程抛出异常,并且退出timed_waiting状态,回到Runnable状态执行异常处理的语句,异常处理的语句执行完毕后子线程运行结束,状态变为terminated。
    老师,我这样理解对吗
    回复 有任何疑惑可以回复我~ 2021-08-23 08:18:04
  • 悟空 回复 提问者 大魔王kite #2
    是对的
    回复 有任何疑惑可以回复我~ 2021-08-23 14:03:35
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信