java - 当线程抛出异常时会发生什么?

标签 java multithreading

如果我在线程上调用 run() 方法并且 run() 方法抛出一个未捕获的异常,结果会是什么?

谁捕获了这个异常Exception 甚至会被捕获吗?

最佳答案

如果为线程组安装了异常处理程序,JVM 会将异常传递给它。如果它是 AWT 线程,您可以为未处理的异常安装事件处理程序。否则 JVM 会处理它。

带有自定义处理程序的线程组示例以及如何使用它:

public class MyThreadGroup extends ThreadGroup {
    public MyThreadGroup() {
        super("My Thread Group");
    }
    public void uncaughtException(Thread t, Throwable ex) {
        // Handle exception
    }
}

Thread t = new Thread(new MyThreadGroup(), "My Thread") { ... };
t.start();

使用 AWT 异常处理程序的示例:

public class MyExceptionHandler {
    public void handle(Throwable ex) {
        // Handle exception
    }
    public void handle(Thread t, Throwable ex) {
        // Handle exception
    }
}

System.setProperty("sun.awt.exception.handler", MyExceptionHandler.class.getName());

关于java - 当线程抛出异常时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193210/

相关文章:

c++ - I/O 流真的是线程安全的吗?

java - 为什么 LinkedBlockingQueue#poll() 可能会挂断?

c# - Web Api Controller 和线程池

c# - 这个套接字监听器真的在多线程级别上处理吗?

android - 将按钮从相对布局更改为线性布局奇怪的副作用

Java:JPQL 搜索相似字符串

java - 获取java项目中的包列表

java - 在循环语句中声明变量在 Java 中如何工作

java - 如何重置 for 循环并简化它?

java - 连接Access数据库时如何避免 "Out Of Memory"错误?