一、概念
CountDownLatch 是一个倒计数器,初始化一个计数值,任务线程调用 countDown 不断减1,直到计数值变为0,调用 await 方法的线程会唤醒执行。
二、 AQS
JUC中很多类都是基于 AQS 实现的, CountDownLatch 也不另外,自己实现了一个 AQS 子类 Sync。
// 继承AQS
private static final class Sync extends AbstractQueuedSynchronizer {
private static final long serialVersionUID = 4982264981922014374L;
Sync(int count) {
setState(count);
}
int getCount() {
return getState();
}
// state ==0,表示可以获取锁,否则不可以
protected int tryAcquireShared(int acquires) {
return (getState() == 0) ? 1 : -1;
}
// state ==0, 已经释放,1表示能释放成功