Ch16-Java tools 之 CyclicBarrier

Ch16-Java tools 之 CyclicBarrier

April 1, 2020
Java | JUC
java

java.util.concurrent.CyclicBarrier 底层基于 ReentrantLock 和 Condition 实现,如果 count 不为 0,则调用 Condition 的 await 方法让线程等待执行,当 count 为 0 时,调用 Condition 的 singleAll 唤醒全部等待的线程执行。

1. 重要变量 #

CyclicBarrier 中的 Sync 继承自 AQS,因此其临界资源为 AQS 中的 state 定义为 Count 次数(拦截线程计数器)。

2. 核心接口 #

public class CyclicBarrier {
    private final ReentrantLock lock = new ReentrantLock();
    private Generation generation = new Generation();

    public int await()
    public int await(long timeout, TimeUnit unit)
    public void countDown();
}

每个线程调用 await 方法时,count 就会减 1,如果 count 不为 0,调用 await 的线程等待执行,如果 count 为 0,所有调用 await 方法的线程被唤醒执行。