JAVA线程全局异常处理
大家平时写线程很多,但可能很少关注如何捕获线程的全局异常。其实jdk提供了两种捕获全局异常的方法,一种是基于整个线程类(staticsetDefaultUnaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)),一种基于线程的一个对象(setUncaughtExceptionHandler(Thread.UncaughtExceptionHander eh))。
下面是基于线程的一个对象的示例:
/** * 主线程 */ public class MainThread extends Thread implements Thread.UncaughtExceptionHandler { public static void main(String[] args){ new MainThread().start(); } public void run(){ ChildThread child=new ChildThread(); child.setUncaughtExceptionHandler(this); child.start(); } /** * 获得子线程异常 * @param t * @param e */ @Override public void uncaughtException(Thread t, Throwable e) { System.out.println("以下为子线程异常:"); e.printStackTrace(); } }
/** * 子线程 */ public class ChildThread extends Thread{ public void run(){ int a=Integer.parseInt("sdfdf"); } }
执行主线程的main方法启动子线程,此时主线程uncaughtException会捕获子线程的异常,执行结果如下:
以下为子线程异常:
java.lang.NumberFormatException: For input string: "sdfdf"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at net.hsh.util.ChildThread.run(ChildThread.java:9)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步