线程异常管理器

72 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第28天,点击查看活动详情

本篇文章带大家了解一下线程异常的处理方法。

线程有异常可以捕捉到吗?

我们写代码来演示一下:

image.png

运行结果如下:

image.png

ok,我们如果把这个异常抛给虚拟机,在外面能捕获异常吗?写代码实验一下:

image.png

运行结果如下:

image.png

没有main error字眼,说明没有捕获到。

线程异常管理器

如果用捕获异常来处理异常,我们要在线程里面写非常多的try-catch,而且如果异常在try-catch之外就根本拿不到了,而且try-catch不能捕获线程里面的异常。

那我们线程里面的异常我们需要一个线程异常管理器,来针对性的进行处理,线程给我们提供了这个异常管理器,这个异常管理器可以帮我们处理线程未捕获的异常,ok,我们来测试一下。

image.png

它这个参数是一个函数式的接口,那我们可以使用lamda表达式 image.png

添加下面的实验代码如下:

image.png

实验结果如下:

image.png

当我们把除0异常放在try-catch的外面会发生什么呢? image.png

异常管理器也能捕获到,但try-catch没有起作用。 image.png

总结

我们可以把这个异常机制结合线程钩子来使用,当main线程出现异常被终止后,可以通过异常管理器捕获异常,再把异常信息通过线程钩子做一些额外的处理。