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

来源:5-5 中断信号

JLU_LONG

2019-12-14

        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回答

悟空

2019-12-14

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

0
4
JLU_LONG
非常感谢!
2019-12-14
共4条回复

悟空

2019-12-14

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

0
0

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程