1. 程式人生 > >junit作為多執行緒環境的啟動入口

junit作為多執行緒環境的啟動入口

錯誤現象:

我在除錯一個多執行緒環境下的server程式。用junit的測試方法作為啟動,很快程式就退出,而且沒有任何異常資訊。server程式的邏輯是主執行緒啟動多個執行緒池後退出。多個執行緒池的執行緒都不是Daemon執行緒。採用main方法啟動後程序將不會退出。

原因分析:

在多執行緒環境下,程式退出的條件是,所有的非Daemon執行緒都正常結束或者某個執行緒條用了system.exit方法,導致程序強行退出。在eclipse下執行Junit的類是

Java程式碼  收藏程式碼
  1. public static void main(String  [] args) {  
  2. try {  
  3.    RemoteTestRunner testRunServer= new RemoteTestRunner();  
  4.    testRunServer.init(args);  
  5.    testRunServer.run();  
  6.  catch (Throwable   e) {  
  7.  e.printStackTrace(); // don't allow System.exit(0) to swallow exceptions  
  8.  finally {  
  9.    // fix for 14434  
  10.  System.exit(0);  
  11.    }  

顯然,只要主執行緒結束,整個程式將會退出,這就是採用junit的時候奇怪退出程式的原因。

解決辦法:

在進行多執行緒測試的時候,進來採用自己寫的main方法啟動。