要捕获子线程中抛出的异常,可以通过设置主线程的 UncaughtExceptionHandler 来实现。

在主线程中,可以通过 Thread.setDefaultUncaughtExceptionHandler() 方法设置默认的 UncaughtExceptionHandler,或者通过 Thread.currentThread().setUncaughtExceptionHandler() 方法设置当前线程的 UncaughtExceptionHandler。

在 UncaughtExceptionHandler 的 uncaughtException() 方法中,可以处理子线程中抛出的异常。

下面是一个示例代码:

public class MainThread {
    public static void main(String[] args) {
        // 设置主线程的 UncaughtExceptionHandler
        Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                // 处理子线程中抛出的异常
                System.out.println('捕获到子线程中抛出的异常:' + e);
            }
        });

        // 创建子线程
        Thread childThread = new Thread(new Runnable() {
            @Override
            public void run() {
                // 抛出异常
                throw new RuntimeException('子线程中抛出的异常');
            }
        });

        // 设置子线程的 UncaughtExceptionHandler
        childThread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread t, Throwable e) {
                // 处理子线程中抛出的异常
                Thread.currentThread().getUncaughtExceptionHandler().uncaughtException(Thread.currentThread(), e);
            }
        });

        // 启动子线程
        childThread.start();
    }
}

在上面的示例中,主线程设置了默认的 UncaughtExceptionHandler 来处理子线程中抛出的异常。子线程设置了自己的 UncaughtExceptionHandler,当子线程中抛出异常时,会调用主线程的 UncaughtExceptionHandler 来处理异常。

Java 多线程异常处理:主线程捕获子线程异常

原文地址: https://www.cveoy.top/t/topic/qeKv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录