Thread未捕获异常处理体系

当使用线程池并通过submit提交任务时,如果不调用get()方法,工作线程的异常将无法被捕获和打印。调用get()可以在调用栈中处理异常。线程的未捕获异常处理首先由显式设置的UncaughtExceptionHandler处理,其次检查ThreadGroup,最后是默认的异常处理器。其他线程默认继承父线程的ThreadGroup。
摘要由CSDN通过智能技术生成

1.静默失败

       在以下情形中无法捕获工作线程异常:

       使用线程池,通过submit提交一个任务(无论入参类型是Runable或者Callable),在不调用线程池中的get()方法下,工作线程抛出的异常,无法被打印。

2.自行处理(认为已经捕获了)

如果调用了get(),那么会在该方法的调用栈中进行异常处理。

3.未捕获异常处理

        处理未捕获异常的线程是工作线程自己。

        优先使用显式设置的UncaughtExceptionHandler;如无,则使用ThreadGroup,该类实现了UncaughtExceptionHandler接口;如无则使用默认的。主线程main的group有值,而其它线程在初始化中会默认使用父线程的group。

uncaughtExceptionHandler ===> group ===> defaultUncaughtExceptionHandler

其它线程在初始化中会默认使用父线程的group

 

 

uncaughtExceptionHandler ===> group

未显式设置异常处理器,该线程使用了group中的处理逻辑

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值