Junit 测试多线程,子线程可能会中断
案例
新启动一个线程,每一秒钟打印一个数字,打印 100000 次(保证子线程执行时间够久)
@Test
void testMethods() {
Thread thread1 = new Thread(() -> {
for (int i = 0; i < 100000; i++) {
System.out.println("number:" + i);
}
});
// 启动
thread1.start();
}
结果
多次运行可发现,最后一次打印的number 并不相同。这是为什么呢?
参考网上可知,是由于 Junit 测试主线程执行完成了,会kill掉子线程,因此子线程执行结果未知。
解决办法
想法让主线程不要立即停止,等到子线程执行完成。
// 使用 join 阻塞 junit 主线程。
thread1.join();