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

本文探讨了使用JUnit测试多线程环境下程序异常退出的问题。解析了主线程结束导致整个程序退出的原因,并给出了采用自定义main方法启动的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

错误现象:

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

 

原因分析:

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

 

 public static void main(String  [] args) {
 try {
    RemoteTestRunner testRunServer= new RemoteTestRunner();
    testRunServer.init(args);
    testRunServer.run();
} catch (Throwable   e) {
  e.printStackTrace(); // don't allow System.exit(0) to swallow exceptions
} finally {
    // fix for 14434
  System.exit(0);
    }
}

显然,只要主线程结束,整个程序将会退出,这就是采用junit的时候奇怪退出程序的原因。

 

解决办法:

 

在进行多线程测试的时候,进来采用自己写的main方法启动。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值