Ch14-Java tools 之 CountDownLatch
March 18, 2020
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。