Ch14-Java tools 之 CountDownLatch

Ch14-Java tools 之 CountDownLatch

March 18, 2020
Java | JUC
java

java.util.concurrent.CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。

1. 重要变量 #

CountDownLatch 中的 Sync 继承自 AQS,因此其临界资源为 AQS 中的 state 变量。CountDownLatch 将 state 定义为 Count 次数。

2. 核心接口 #

public class CountDownLatch {
    private static final class Sync extends AbstractQueuedSynchronizer {
        protected int tryAcquireShared(int acquires);
        protected boolean tryReleaseShared(int releases);
    }

    public void await() throws InterruptedException;
    public boolean await(long timeout, TimeUnit unit);
    public void countDown();
}

到这里其实就很显然可以看出 CountDownLatch 的工作原理其实很简单。

  • 每次调用 countDown() 方法的时候,都是对 AQS 中的 state 减 1,直到 state 变成 0,便唤醒 AQS 的 CLH 中的所有 NODE(线程)。
  • 每次调用 await() 方法的时候,判断下 state 是否为 0,如果不是 0,那么将自己挂起,放入 AQS 的 CLH。

3. 参考文献 #