异常处理器详解 Java多线程异常处理机制 多线程中篇(四)

 在Thread中有异常处理器相关的方法

image_5c5bc46a_7657
在ThreadGroup中也有相关的异常处理方法
image_5c5bc46a_717e
原文地址:image_5c5bc46a_25c1
对于未检查异常,将会直接宕掉,主线程则继续运行,程序会继续运行
在主线程中能不能捕获呢?
我们简单粗暴一点,直接全部包到try catch中
image_5c5bc46a_1f01
你会发现,然而并没有什么卵用,主线程中的try catch并不会得到什么信息,跟原来的结果还是一样的,线程直接宕掉

已检查异常

image_5c5bc46a_1b9a
对于已检查的异常,run方法本身是不支持抛出的,上面代码中,想要throws,IDE提示异常,从run方法可以看得出来
run方法本身是不支持throws的(签名中没有throws)
image_5c5bc46a_2d74
所以怎么办?
既然是已检查异常,肯定是要处理的,既然不能丢出去,就只有一个办法了,那就是自己捕获,放置在try catch中
image_5c5bc46a_5ee4

小结

在run方法中是不能够抛出异常的,如果是已检查的异常,那么必须进行try catch
对于未检查的异常,如果没有进行处理,一旦抛出线程将会宕掉,而且在主线程中并不能捕获到这个异常
难道对于未检查的异常也都是try catch吗?(当然,这是一种方式)
还有没有其他解决方案?

异常处理器

在Java线程的run方法中,对于未检查异常,借助于异常处理器进行处理的
字面意思,直接理解为处理异常的方法,那么如何配置这个处理异常的方法呢?如何设置,又是如何调用?
UncaughtExceptionHandler,是Thread的内部接口(1.8中已经设置为函数式接口)
image_5c5bc46a_5bcf
Thread内部有两个变量,用于记录异常处理器
image_5c5bc46a_1ec8
对于两个set方法,没有什么特别的,主要就是设置这两个内部变量
image_5c5bc46a_205e
对于getUncaughtExceptionHandler方法,如果当前非空,那么返回当前,否则,将返回当前线程组,很显然,ThreadGroup实现了Thread.UncaughtExceptionHandler
image_5c5bc46b_1509
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信