Junit单元测试多线程

先说结论:Junit不支持多线程,在主线程执行完后,无论是否是守护线程,都会直接退出。导致子线程可能未执行结束。

Main方法里执行多线程 vs 使用Junit测试多线程

用于测试的多线程类:

public class MultiThreadCls {

    public void func() {
        System.out.println("func start");

        ExecutorService threadPool = Executors.newFixedThreadPool(); // 默认为非守护
        for (int i = 0; i < 5; i++) {
            int finalI = i;
            threadPool.execute(() -> {
                System.out.println("in tread:" + finalI);
            });
        }

        threadPool.shutdown();
        System.out.println("func end");
    }
}

main方法调用结果

执行完主线程后,等待子线程也执行完成后才退出
在这里插入图片描述

Junit测试结果

有几个子线程未执行就退出
在这里插入图片描述

解决方法

为了不修改被测试类,可以在单元测试最后等待,不退出主线程。如:
Thread.sleep(5000); 若能估计子线程什么时候结束,可以单位测试最后sleep
System.in.read(); 若估计不了结束时间,等待键盘输入结束,手动结束测试

如果方便修改被测试类,可以选择CountDownLatch工具类,或jion住子线程的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值