栗子1:主线程无法捕获子线程抛出的异常
1 | public class UnCaughtException { |
执行结果:
因为try..catch..只能捕获当前线程内抛出的异常。
1 | Exception in thread "thread-1" Exception in thread "thread-4" Exception in thread "thread-2" Exception in thread "thread-3" java.lang.RuntimeException: 我是来自子线程的异常 |
栗子2:使用Thread类的UncaughtExceptionHandler接口实现全局捕获异常
1 | // 自定义异常处理器,由于是函数式接口,可以使用Lambda表达式 |
1 | public class UnCaughtException { |
执行结果:
1 | thread-1发生了异常;我是来自子线程的异常 |
如何处理子线程出现的异常?
- 在子线程内部try..catch..处理
- 设置Thread默认的异常处理器,全局处理异常