问题:如果使用Junit单元测试测试多线程程序,主线程执行完后,运行时间较长的所有子线程都会被自动结束。
原因:通过查看单元测试类TestRunner的部分源码,可以看出,调用了System.exit()这个方法,这会导致整个jvm结束,所以线程都会被结束。TestRunner的部分源码如下:
public static void main(String args[]) {
TestRunner aTestRunner = new TestRunner();
try {
TestResult r = aTestRunner.start(args);
if (!r.wasSuccessful()) {
System.exit(FAILURE_EXIT);
}
System.exit(SUCCESS_EXIT);
} catch (Exception e) {
System.err.println(e.getMessage());
System.exit(EXCEPTION_EXIT);
}
}