今天在做单元测试时,发现了一个问题。在@Test的单测方法中起一个子线程,如果该子线程执行时长大于单测主方法的执行时长,则在主方法执行结束后直接结束,不再继续执行。贴代码看效果:
@Test
public void testThread2(){
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("subThread");
}
}).start();
// try {
// Thread.sleep(110);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
System.out.println("END");
}
如果主方法中sleep的时长小于子线程,则子线程内的内容不会打印出,也就是子线程没有执行完。
对比main方法的情况:
public static void main(String[] args){
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("subThread end");
}
}).start();
System.out.println("main END");
}
在main方法中另开启一个线程后,其与main线程是两个相互独立的线程,不管sleep多久都会打印两个输出结果。
郁闷,后面再研究。