Java 如果一个线程在多线程环境中崩溃,如何关闭JVM?

Java 如果一个线程在多线程环境中崩溃,如何关闭JVM?,java,multithreading,jvm,Java,Multithreading,Jvm,我有一个Java程序,它在较高级别上如下所示: public static void main(final String[] args) { Thread t1 = new ComplicatedThread1(); Thread t2 = new ComplicatedThread2(); Thread t3 = new ComplicatedThread3(); t1.start(); t2.start(); t3.start(); }

我有一个Java程序,它在较高级别上如下所示:

public static void main(final String[] args) {

    Thread t1 = new ComplicatedThread1();
    Thread t2 = new ComplicatedThread2();
    Thread t3 = new ComplicatedThread3();

    t1.start();
    t2.start();
    t3.start();

}
每个线程都包含很多不是我写的代码。 一个线程中可能有多个子线程。 如果恰好有一个线程崩溃(即抛出未捕获的运行时异常),则会出现最大的问题。在这种情况下,整个程序仍在运行,但是 它有故障

现在,考虑到我不能使每个线程都万无一失,我想在任何线程崩溃时完全关闭JVM


问题:如何捕获任何
线程引发的主程序运行时异常,并要求系统关闭?

在主程序顶部添加几行:

public static void main(final String[] args) {

    // Making sure that if one thread crashes,
    // then the whole JVM will shut down.
    Thread.setDefaultUncaughtExceptionHandler(new Thread.
        UncaughtExceptionHandler() {
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println(t + " throws exception: " + e);
                System.exit(1);
            }
        });

    // Do anything you want from here
    ....
}

这将启动JVM的关闭过程。请注意,某些活动线程可能仍会运行一段时间。

在主过程的顶部添加几行:

public static void main(final String[] args) {

    // Making sure that if one thread crashes,
    // then the whole JVM will shut down.
    Thread.setDefaultUncaughtExceptionHandler(new Thread.
        UncaughtExceptionHandler() {
            public void uncaughtException(Thread t, Throwable e) {
                System.out.println(t + " throws exception: " + e);
                System.exit(1);
            }
        });

    // Do anything you want from here
    ....
}
这将启动JVM的关闭过程。请注意,某些活动线程可能仍会运行一段时间