Junit主线程执行完毕后,就会结束进程,不关注是否有其他线程在运行。当Junit运行完毕后,如果其他线程还没有执行完毕,那么不会再执行。
使用CountDownLatch,保证启动的线程运行结束后,Junit主线程再执行完毕,就不会有问题了。
可以使用下面代码测试不加CountDownLatch时的情况。新启动的线程没有执行完毕
private int i = 3; @Test public void test() { for (int i = 0; i < this.i; i ++) { new Thread(new Runner()).start(); } } class Runner implements Runnable { @Override public void run() { System.out.printlun(123); } }
加上CountDownLatch时的情况。新启动的线程可以执行完毕
private int i = 3; private CountDownLatch latch = new CountDownLatch(i); @Test public void test() { for (int i = 0; i < this.i; i ++) { new Thread(new Runner()).start(); } try { latch.await(); } catch (InterruptedException e) { e.printStackTrace(); } } class Runner implements Runnable { @Override public void run() { System.out.printlun(123); latch.countDown(); }