技术

Junit单测踩坑

背景

今天在写单测的时候,会涉及到测试多线程的部分,但是在测试的时候发现现象会诡异 子线程的逻辑还没有执行的时候,jvm就会退出,或者有的时候执行了一小部分,就会退出了。

try
        {
            Table table = hbaseConnection.getTable(TableName.valueOf(TABLE_NAME));
            new Thread(() -> {
                try
                {
                    while (totalCount.get() < 50)
                    {
                        System.out.printf("开始跑 %s \n", totalCount.get());
                        putRowsS(table, 1);
                        totalCount.incrementAndGet();
                    }
                } catch (Throwable e)
                {
                    e.printStackTrace();
                }
            }).start();
            System.out.println("执行完事");
        } catch (Throwable throwable)
        {
            throwable.printStackTrace();
        }

解决思路

第一时间以为是遇到了报错,或者是异常。但是所有的地方都加了try catch还是没有发现有任何的错误 后来在主线程执行的地方,加了日志,发现子线程还没有执行的时候,主线程就已经跑完了,然后就导致jvm直接退出了

后来在网上搜了一下,发现在junit的底层,主线程执行完后,就调用了System.exit来进行退出了,这个时候jvm就会退出,而不会等待子线程的执行。

解决方法