应用篇
CountDownLatch是一个java的同步工具类。
public static void main(String[] args) throws InterruptedException {
int n = 100;
CountDownLatch doneSignal = new CountDownLatch(n);
Executor e = Executors.newFixedThreadPool(10);
for (int i = 0; i < n; ++i) {
e.execute(new WorkerRunnable(doneSignal, i));
}
doneSignal.await();
System.out.println("Over");
System.exit(0);
}
public static class WorkerRunnable implements Runnable {
private final CountDownLatch doneSignal;
private final int i;
public WorkerRunnable(CountDownLatch doneSignal, int i) {
this.doneSignal = doneSignal;
this.i = i;
}
public void run() {
System.out.println("工作中" + i + ": " + System.currentTimeMillis());
doneSignal.countDown();
}
}
执行结果
可见CountDownLatch可以保证所有线程执行完毕后再退出程序。这个线程数和N的大小有关。
把N改为5,执行结果如下。System.exit改为如下。
System.exit(-1);
线程提前返回。countDown减1,当count为0的时候,结束等待。
进阶篇
为了更好的理解countDownLatch内部实现原理,我们将从源码解析的角度解读countDownLatch锁机制。