栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

获取线程运行时异常

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

获取线程运行时异常

一 运行时异常 API
// 为某个特定线程指定 UncaughtExceptionHandler
public void setUncaughtExceptionHandler(UncaughtExceptionHandler eh)
// 设置全局UncaughtExceptionHandler
public static void setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler eh)
// 获取特定线程的 UncaughtExceptionHandler
public UncaughtExceptionHandler getUncaughtExceptionHandler()
// 获取全局的 UncaughtExceptionHandler
public static UncaughtExceptionHandler getDefaultUncaughtExceptionHandler()
二 点睛

线程在执行单元中不允许抛出 checked 异常,线程运行在自己的上下文中,派生它的线程将无法直接获得它允许中出现的异常信息。Java 为我们提供了 UncaughtExceptionHandler 接口,从而得知是哪个线程在运行时出错,以及出现了什么样的错误。

@FunctionalInterface
public interface UncaughtExceptionHandler {
    
    void uncaughtException(Thread t, Throwable e);
}

上述代码中,UncaughtExceptionHandler 是一个 FunctionalInterface,只有一个抽象方法,该回调接口被  Thread 中的 dispatchUncaughtException 方法调用。

private void dispatchUncaughtException(Throwable e) {
    getUncaughtExceptionHandler().uncaughtException(this, e);
}

当线程在运行过程中出现异常时,JVM 会调用 dispatchUncaughtException 方法,该方法会将对应的线程实例以及异常信息传递给接口。

三 实战 1 代码
package concurrent;

import java.util.concurrent.TimeUnit;

public class UncatchExceptionHandlerDemo {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            try {
                TimeUnit.SECONDS.sleep(2);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(1 / 0);
        });

        thread.setUncaughtExceptionHandler((t, e) -> {
            System.out.println(t.getName() + " occur exception");
            e.printStackTrace();
        });


        thread.start();
    }
}
2 测试
Thread-0 occur exception
java.lang.ArithmeticException: / by zero
    at concurrent.UncatchExceptionHandlerDemo.lambda$main$0(UncatchExceptionHandlerDemo.java:14)
    at java.lang.Thread.run(Thread.java:748)

  

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/785995.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号