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

mer*_*114 1 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();

}
Run Code Online (Sandbox Code Playgroud)

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

既然我无法使每个线程变得万无一失,我想在任何线程崩溃时完全关闭JVM .

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

mer*_*114 5

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

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
    ....
}
Run Code Online (Sandbox Code Playgroud)

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