背景
今天在写单测的时候,会涉及到测试多线程的部分,但是在测试的时候发现现象会诡异
子线程的逻辑还没有执行的时候,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就会退出,而不会等待子线程的执行。
解决方法