Java 如果一个线程在多线程环境中崩溃,如何关闭JVM?
我有一个Java程序,它在较高级别上如下所示: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(); }
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的关闭过程。请注意,某些活动线程可能仍会运行一段时间