总体介绍
一个同步器:能够让一个或者多个线程等待等待某个条件的到来再继续执行。
大家可以把CountDownLatch初始化的值认为是有N道门,刚开始是线程调用await方法发现门关着的,所以就只有等待。而外界条件的变化是通过countDown来实现,可以认为countDown一次就是打开一道门,当countDown的次数为N时,则全部的门打开,则刚才在await处等待的线程将继续执行任务。
看下具体的代码实现:
public class CountDownLatch {
private static final class Sync extends AbstractQueuedSynchronizer {
private static final long serialVersionUID = 4982264981922014374L;
...
}
private final Sync sync;
public CountDownLatch(int count) {
if (count < 0) throw new IllegalArgumentException("count < 0");
this.sync = new Sync(count