junit作为多线程环境的启动入口

来源:互联网 发布:webstorm mac 破解版 编辑:程序博客网 时间:2024/05/21 02:51

错误现象:

我在调试一个多线程环境下的server程序。用junit的测试方法作为启动,很快程序就退出,而且没有任何异常信息。server程序的逻辑是主线程启动多个线程池后退出。多个线程池的线程都不是Daemon线程。采用main方法启动后程序将不会退出。

 

原因分析:

在多线程环境下,程序退出的条件是,所有的非Daemon线程都正常结束或者某个线程条用了system.exit方法,导致进程强行退出。在eclipse下运行Junit的类是org.eclipse.jdt.internal.junit.runner.RemoteTestRunner。通过查看这个类的main方法。如下:

 

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方法启动。

0 0
原创粉丝点击