IOTXING

记录技术学习之路

0%

Junit单测踩坑

背景

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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就会退出,而不会等待子线程的执行。

解决方法