>

子线程异常处理

该文章参考自:https://blog.csdn.net/qq_38962004/article/details/79908245  

在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了。那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相应的处理呢?

常见错误

也许有人会觉得,很简单嘛,直接在父线程启动子线程的地方try ... catch一把就可以了,其实这是不对的。

让我们回忆一下Runnable接口的run方法的完整签名,因为没有标识throws语句,所以方法是不会抛出checked异常的。至于RuntimeException这样的unchecked异常,由于新线程由JVM进行调度执行,如果发生了异常,也不会通知到父线程。

解决方式:

这里有三种解决办法,前两种都是在子线程中处理,第三种是通过在父线程中处理。具体哪种方案取决于使用场景。

方法一:子线程中try catch处理

方法二:为线程设置“未捕获异常处理器”UncaughtExceptionHandler

方法三:通过Future的get方法捕获异常

 

主线程代码:


 

 

  考虑之前异常导出文章中的一个不足点,可考虑第二种方式,业务代码中多加一行固定的设置当前线程的异常处理,其他封装到工具类中处理,相比第一种方式要简单一些,业务方使用起来也较为接受。

 

posted @   字节悦动  阅读(159)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示