java 处理线程中抛出的未捕获的异常

写一个handler进行错误处理,处理线程中的漏网之鱼(未在线程中被捕获的异常)

是什么?为什么?怎么做?

 

一、是什么

java并发中,对在线程中未能捕获的异常进行处理的一种机制。通常我们会写一个异常处理类,这个类将实现UncaughtExceptionHandler接口,对未被捕获的异常进行相应的处理(比如说记录日志、重启线程什么的)。

二、为什么

异常分为被捕获的异常和未被捕获的异常。如果线程中出现的异常在线程中就被捕获,那么称为被捕获的异常。但是如果线程中未对异常进行处理,那么称为未被捕获的异常。

如果存在未被捕获的异常,有可能对线程的稳定性造成影响。为了安全起见,需要一定的机制来捕获未被捕获的异常,这就是我们需要异常处理类的原因。

三、怎么做

1.如果存在未被捕获的异常

这里的System.out.println(1 / 0);肯定会报错,结果为:

线程报错后直接停止,错误被异常处理类exceptionHandler捕获并且进行处理。

2.如果异常在线程中就被捕获了

那就轮不到exceptionHandler出场了,错误直接在线程内部就会被处理。

线程也不会被中途中断。

3.可以在异常处理类中尝试重启线程

可以尝试再次进行处理(但是估计是同一个错误犯两次)。

我个人感觉:一般情况下,异常处理类做下日志记录就好了。

四、总结

加上了一层保险。

发表评论

电子邮件地址不会被公开。 必填项已用*标注