关于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回答
-
本质是因为catch后,程序会继续执行catch后面的其它语句。
因为sleep接收到中断信号后,会把本次的中断信号自动清除,所以“当try catch只包含到Thread.sleep()的时候,第一次进入到休眠接收到中断信号后catch住了异常并打印出来,但是程序后面还会继续执行打印 偶数 ,后面也不会再次中断。”,这时catch后面的其它语句就是while剩下的语句。
“try catch包住整个while的时候,第一次进入sleep然后catch了异常”,然后由于catch后面的其它语句已经没有了,所以程序就停止了。
232019-08-23
相似问题