关于try。。。catch范围不同而出现的问题

来源:5-4 遇到阻塞

qq_小庄_1

2019-08-22

Runnable runnable = ()->{
int i=0;
while (i<9999) {
if(i%2 == 0){
System.out.println(“偶数:”+i);
}
i++;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println(“输出完毕,程序结束”);
};

当try catch只包含到Thread.sleep()的时候,第一次进入到休眠接收到中断信号后catch住了异常并打印出来,但是程序后面还会继续执行打印 偶数 ,后面也不会再次中断。
try catch包住整个while的时候,第一次进入sleep然后catch了异常,程序就会停止了。
我想请问悟空老师,为什么会这样?try catch的范围影响这么大吗?

写回答

1回答

悟空

2019-08-22

本质是因为catch后,程序会继续执行catch后面的其它语句。

因为sleep接收到中断信号后,会把本次的中断信号自动清除,所以“当try catch只包含到Thread.sleep()的时候,第一次进入到休眠接收到中断信号后catch住了异常并打印出来,但是程序后面还会继续执行打印 偶数 ,后面也不会再次中断。”,这时catch后面的其它语句就是while剩下的语句。

“try catch包住整个while的时候,第一次进入sleep然后catch了异常”,然后由于catch后面的其它语句已经没有了,所以程序就停止了。

2
3
悟空
回复
qq_小庄_1
哈哈哈是的,说明你思考问题的能力强
2019-08-23
共3条回复

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

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

2512 学习 · 939 问题

查看课程