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

Gee*_*eek 11 java multithreading

如果我run()在一个Thread上调用该方法并且该run()方法抛出一个未被捕获的异常会产生什么结果呢?

谁抓住了这个例外?是否异常,甚至被逮住?

Dra*_*mon 9

如果为ThreadGroup安装了异常处理程序,则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();
Run Code Online (Sandbox Code Playgroud)

使用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());
Run Code Online (Sandbox Code Playgroud)

  • "否则JVM会处理它." 更确切地说,引发异常的线程将无声地死亡. (7认同)