前言:
CountDownLatch是Java并发编程很好用的一个tools,其作用是主线程等待子线程都完成后主线程才开始执行,比如说可以用来
计算子线程任务完成后共耗时多少,或者一个游戏场景所有玩家准备后主线程才开始游戏等等
CountDownLatch的功能和Future的get()方法类似,只有任务完成了才返回,不然一直阻塞.
CountDownLatch内部有个计数器,在新建这个闭锁的时候构造参数传入,每当调用countDown方法,计数减一,
当在主线程调用await方法的时候会一直阻塞到计数器为0,注意当计数器为0后,不能再循环利用这个闭锁.
实战:
/**计算子线程耗时 * @author m969130721@163.com * @date 18-6-13 下午6:13 */ public class Demo { public static void main(String[] args) throws InterruptedException { Instant start = Instant.now(); CountDownLatch countDownLatch = new CountDownLatch(5); for (int i = 0; i < 5; i++) { new Thread(new MyThread(countDownLatch)).start(); } //阻塞直到计数器为0 countDownLatch.await(); // countDownLatch.await(10,TimeUnit.SECONDS);最多等待10秒,执行下面操作 Instant end = Instant.now(); System.out.println(Duration.between(start, end).toMillis()); } } class MyThread implements Runnable { private CountDownLatch countDownLatch; public MyThread(CountDownLatch countDownLatch) { this.countDownLatch = countDownLatch; } @Override public void run() { try { Thread.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } finally { countDownLatch.countDown(); } } }结果: