1.静默失败
在以下情形中无法捕获工作线程异常:
使用线程池,通过submit提交一个任务(无论入参类型是Runable或者Callable),在不调用线程池中的get()方法下,工作线程抛出的异常,无法被打印。
2.自行处理(认为已经捕获了)
如果调用了get(),那么会在该方法的调用栈中进行异常处理。
3.未捕获异常处理
处理未捕获异常的线程是工作线程自己。
优先使用显式设置的UncaughtExceptionHandler;如无,则使用ThreadGroup,该类实现了UncaughtExceptionHandler接口;如无则使用默认的。主线程main的group有值,而其它线程在初始化中会默认使用父线程的group。
uncaughtExceptionHandler ===> group ===> defaultUncaughtExceptionHandler
其它线程在初始化中会默认使用父线程的group
uncaughtExceptionHandler ===> group
未显式设置异常处理器,该线程使用了group中的处理逻辑