请稍等 ...
×

采纳答案成功!

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

老师,如果while接收到interrupt的话,下面的睡眠都不应该抛出异常啊,能解释下这个吗?

        while (num <= 10000 && !Thread.currentThread().isInterrupted()) {
            if (num % 100 == 0) {
                System.out.println(num + "是100的倍数");
            }
            num++;
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

正在回答

2回答

但是这一段代码由于sleep是在循环体的末尾,所以在休眠期间被中断,并且抛出异常是有极大概率的。

0 回复 有任何疑惑可以回复我~
  • 提问者 JLU_LONG #1
    try {
                    while (num <= 300 && !Thread.currentThread().isInterrupted()) {
                        if (num % 100 == 0) {
                            System.out.println(num + "是100的倍数");
                        }
                        num++;
                    }
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
    老师 上面的代码中为什么会执行到sleep while中的isinterrupted是接收到了interrupt停止了死循环吗
    回复 有任何疑惑可以回复我~ 2019-12-14 10:07:31
  • 提问者 JLU_LONG #2
    老师我知道了 是因为while中的代码很快执行完 然后执行到sleep中了
    回复 有任何疑惑可以回复我~ 2019-12-14 10:18:23
  • 悟空 回复 提问者 JLU_LONG #3
    恩对的
    回复 有任何疑惑可以回复我~ 2019-12-14 10:33:00
悟空 2019-12-14 09:59:49

是在try期间收到中断信号,抛出异常被catch。如果恰好不是在睡眠期间收到的异常,那么在下一次while判断循环的时候,确实是会跳过的,不会抛出异常。

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信