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();