这千里的烟雾波浪嘞
1. 内部类
private static class Generation {
boolean broken = false;
}
- generation就相当于一组线程
2. 成员变量
// 回调函数
private final Runnable barrierCommand;
// 尚需等待的线程数,为0时即可放行
private int count;
// 用来标记一组进程
private Generation generation = new Generation();
// await方法是一个加锁的方法
private final ReentrantLock lock = new ReentrantLock();
// 即传入的参数,合作线程数
private final int parties;
// condition队列
private final Condition trip = lock.newCondition();
- cyclicbarrier的实现机制就是用的condition队列,后面的方法会详细说
3. 构造方法
public CyclicBarrier(int parties) {
this(parties, null);
}
public CyclicBarrier(int parties, Runnable barrierAction) {
if (parties <= 0) throw new IllegalArgumentException();
this.parties = parties;
this.count = parties;
this.barrierCommand = barrierAction;
}
- 可接受一个Runnable作为回调函数,每次放行时调用
4. await方法
public int await() throws InterruptedException, BrokenBarrierException {
try {
return do