2016-02-10 64 views
1

我有一個Java程序,在高水平上看起來是這樣的:如果一個線程在多線程環境中崩潰,如何關閉JVM?

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。

問題:如何捕捉運行時異常由任何線程提出的主要方案,並要求系統關機?

回答

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 
    .... 
} 

這將啓動JVM的關閉程序。請注意,某些活動線程可能仍會運行一段時間。