CyclicBarrier详解
简介
- 阻塞一组线程,直到某个事件发生.
- 所有线程必须都到达栅栏位置时,才能继续执行.
- 使得一定数量的线程反复在栅栏位置汇集.需要等待集合的线程调用
await()
方法在栅栏处阻塞. - 栅栏释放阻塞的线程后会重置以便下一次使用.
核心方法
await()方法
会调用dowait()
方法.
- 若线程不是最后一个到达栅栏的线程,则其处于等待状态.除非:
- 最后一个线程到达栅栏,唤醒其他等待的线程.
- 某个参与的线程等待超时.
- 某个参与线程被中断.
- 调用了
reset()
方法,将栅栏设置为初始状态.
异常
- 若一个线程处于等待状态时,其他线程调用
reset()
,抛出BrokenBarrierException
异常. - 任何线程在等待时被中断,其他线程都抛出
BrokenBarrierException
异常.
nextGeneration()方法
用来释放栅栏并准备下一个栅栏.
- 唤醒正在栅栏等待的线程.
- 重置线程计数count.
- 重置线程所处的年代(generation).