接口
Thread.UncaughtExceptionHandler
1.概述
public static interface Thread.UncaughtExceptionHandler
当 Thread 因未捕获的异常而突然终止时,调用处理程序的接口。
当某一线程因未捕获的异常而即将终止时,Java 虚拟机将使用 Thread.getUncaughtExceptionHandler() 查询该线程以获得其 UncaughtExceptionHandler 的线程,并调用处理程序的 uncaughtException 方法,将线程和异常作为参数传递。如果某一线程没有明确设置其 UncaughtExceptionHandler,则将它的 ThreadGroup 对象作为其 UncaughtExceptionHandler。如果 ThreadGroup 对象对处理异常没有什么特殊要求,那么它可以将调用转发给默认的未捕获异常处理程序。
2.源码阅读:
public interface UncaughtExceptionHandler {
/**
* 当给定线程因给定的未捕获异常而终止时,调用该方法。
* Java Virtual Machine.
* @param t 线程
* @param e 异常
*/
void uncaughtException(Thread t, Throwable e);
}
3.用法
public class MyThreadUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName()+"线程出线了异常:"+e);
e.printStackTrace();
}
}
public static void main(String[] args){
Thread.currentThread().setUncaughtExceptionHandler(new MyThreadUncaughtExceptionHandler());
int a =5/0;
System.out.println("异常正常结束");
}
输入:
main线程出线了异常:java.lang.ArithmeticException: / by zero
4.总结
使用try ..catch捕获异常时,异常不会向上传递给上一级调用者。
使用自定义uncaughtExceptionhandler会对于异常处理之后返回给上一级调用者,导致程序没有正常结束。

本文介绍了Java的Thread.UncaughtExceptionHandler接口,用于处理线程因未捕获异常而终止的情况。当线程抛出未捕获异常时,JVM会查找线程的UncaughtExceptionHandler并调用其uncaughtException方法。如果没有设置,会默认使用ThreadGroup。通过自定义此处理程序,可以实现异常处理并控制异常向上级调用者传递的行为。
1万+

被折叠的 条评论
为什么被折叠?



