CyclicBarrier(parties):初始化相互等待的线程数量的构造方法。
CyclicBarrier(parties,Runnable barrierAction):初始化相互等待的线程数量以及屏障线程的构造方法,当 CyclicBarrier 的计数器变为 0 时,会执行 barrierAction 构造方法。
getParties():获取 CyclicBarrier 打开屏障的线程数量,也称为方数。
getNumberWaiting():获取正在CyclicBarrier上等待的线程数量。
await():在 CyclicBarrier 上进行阻塞等待,直到发生以下情形之一:在 CyclicBarrier 上等待的线程数量达到 parties,则所有线程被释放,继续执行;
- 当前线程被中断,则抛出 InterruptedException 异常,并停止等待,继续执行;
- 其他等待的线程被中断,则当前线程抛出 BrokenBarrierException 异常,并停止等待,继续执行;
- 其他等待的线程超时,则当前线程抛出 BrokenBarrierException 异常,并停止等待,继续执行;
- 其他线程调用 CyclicBarrier.reset() 方法,则当前线程抛出 BrokenBarrierException 异常,并停止等待,继续执行。
await(timeout,TimeUnit):在CyclicBarrier上进行限时的阻塞等待,直到发生以下情形之一:
- 在 CyclicBarrier 上等待的线程数量达到 parties,则所有线程被释放,继续执行;
- 当前线程被中断,则抛出 InterruptedException 异常,并停止等待,继续执行;
- 当前线程等待超时,则抛出 TimeoutException 异常,并停止等待,继续执行;
- 其他等待的线程被中断,则当前线程抛出 BrokenBarrierException 异常,并停止等待,继续执行;
- 其他等待的线程超时,则当前线程抛出 BrokenBarrierException 异常,并停止等待,继续执行;
- 其他线程调用 CyclicBarrier.reset() 方法,则当前线程抛出 BrokenBarrierException 异常,并停止等待,继续执行。
isBroken():获取是否破损标志位 broken 的值,此值有以下几种情况:
- CyclicBarrier 初始化时,broken=false,表示屏障未破损;
- 如果正在等待的线程被中断,则 broken=true,表示屏障破损;
- 如果正在等待的线程超时,则 broken=true,表示屏障破损;
- 如果有线程调用 CyclicBarrier.reset() 方法,则 broken=false,表示屏障回到未破损状态。
reset():使得CyclicBarrier回归初始状态,直观来看它做了两件事:
- 如果有正在等待的线程,则会抛出 BrokenBarrierException 异常,且这些线程停止等待,继续执行。
- 将是否破损标志位 broken 置为 false。