捕获其他线程的异常详解编程语言
2023-06-13 09:20:23 时间
在A线程里起了另B线程,但B线程报错了,这时想要在A线程里捕获B线程的异常是无法做的,除非在捕获B线程前先设置线程捕获器。直接来看代码:
package com.wulinfeng.exceptionHandler; import java.lang.Thread.UncaughtExceptionHandler; public class ExceptionCatcher { public static void main(String[] args) { // 1、新线程抛异常,main线程无法捕获 try { new Thread() { @Override public void run() { System.out.println("第一个空指针来了:"); throw new NullPointerException(); }.start(); } catch (Exception e) { System.out.println("第一次抛出异常!"); // 2、通过线程捕获异常 try { // 先休眠,等上面的线程自动结束 Thread.sleep(1000); // 先设置捕获线程 Thread.setDefaultUncaughtExceptionHandler(new UncaughtExceptionHandler() { @Override public void uncaughtException(Thread t, Throwable e) { System.out.printf("线程:%s 抛出异常:%s/n", t.getName(), e.getClass().getName()); e.printStackTrace(); }); // 新起线程抛出异常 new Thread() { @Override public void run() { System.out.println("第二个空指针来了:"); throw new NullPointerException(); }.start(); } catch ( Exception e) { System.out.println("第二次抛出异常!"); }
运行结果:
第一个空指针来了: Exception in thread "Thread-0" java.lang.NullPointerException at com.wulinfeng.exceptionHandler.ExceptionCatcher$1.run(ExceptionCatcher.java:16) at java.lang.Thread.run(Thread.java:745) 第二个空指针来了: 线程:Thread-1 抛出异常:java.lang.NullPointerException java.lang.NullPointerException at com.wulinfeng.exceptionHandler.ExceptionCatcher$3.run(ExceptionCatcher.java:46) at java.lang.Thread.run(Thread.java:745)
根据线程执行速度不同,新起的线程里exception和本地线程里字符串的打印顺序先后有可能不同。
原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/7829.html
cjava相关文章
- 集合线程安全问题:第一章:集合类不安全之并发修改异常
- SQLServer 错误 5235 [EMERGENCY] 由于错误状态 ERROR_STATE,由 USER_NAME 执行的 DBCC DBCC_COMMAND_DETAILS 已异常终止。 运行时间:HOURS 小时 MINUTES 分钟 SECONDS 秒。 故障 处理 修复 支持远程
- JSP JSTL <c:catch>标签:捕获异常标签
- Linux下线程处理异常情况(linux线程异常)
- 解决方法解决Oracle常见异常的方法(oracle常见异常)
- 排查Oracle数据库异常信息方法(oracle输出异常信息)
- MySQL连接异常解决Bi连接报错问题(Bi连接不上mysql)
- Oracle发生IO异常解决到底(io异常 oracle)
- Redis集群槽故障 从异常到恢复(redis集群槽异常恢复)