首页 > Java > java教程 > Java中如何捕获线程抛出的异常?

Java中如何捕获线程抛出的异常?

DDD
发布: 2024-12-04 00:26:10
原创
879 人浏览过

How Can I Catch Exceptions Thrown by Threads in Java?

在 Java 中捕获线程中的异常

在多线程应用程序中,管理不同线程中抛出的异常可能是一个挑战。考虑一个场景,主类启动一个新线程并尝试捕获它生成的任何运行时异常。

// Original Code
public class CatchThreadException {

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread() {
            @Override
            public void run() {
                throw new RuntimeException("Exception from thread");
            }
        };

        try {
            t.start();
            t.join();
        } catch (RuntimeException e) {
            System.out.println("** RuntimeException from main");
        }

        System.out.println("Main stopped");
    }
}
登录后复制

在此代码中,主线程使用 join() 等待子线程完成方法。然而,当子线程抛出异常时,主线程不会捕获它。

线程的未捕获异常处理程序

为了解决这个问题,Java 提供了 Thread .UncaughtExceptionHandler 接口。通过实现这个接口并将其分配给一个线程,您可以处理该线程中抛出的未捕获的异常。

// Using Uncaught Exception Handler
public class CatchThreadException {

    public static void main(String[] args) throws InterruptedException {
        Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread th, Throwable ex) {
                System.out.println("Uncaught exception: " + ex);
            }
        };
        Thread t = new Thread() {
            @Override
            public void run() {
                throw new RuntimeException("Exception from thread");
            }
        };
        t.setUncaughtExceptionHandler(h);
        t.start();
        t.join();
        System.out.println("Main stopped");
    }
}
登录后复制

在这个修改后的代码中:

  1. 我们创建一个新的实例UncaughtExceptionHandler。
  2. 我们使用 setUncaughtExceptionHandler() 将 UncaughtExceptionHandler 分配给子线程
  3. 当子线程中发生未捕获的异常时,我们的处理程序的 uncaughtException() 方法就会被调用,让我们能够优雅地处理异常。

以上是Java中如何捕获线程抛出的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板