循环栅栏, 循环执行: 在凑满指定计数后执行指定的方法.
特点:
- CyclicBarrier 在计数为 0 之后会自动重置, 所以可以复用.
- 工作线程完成任务之后, 会阻塞等待其他线程完成.
1. API
-
CyclicBarrier(parties, barrierAction)
必须设置线程数量, 可以设置等待完成后的统一任务 -
await
当前线程等待其他线程执行到 await 位置, 凑满足够的线程之后, 如果有统一任务, 则先执行一次统一任务, 然后唤醒所有等待线程继续向下执行, 并重置计数.如果在等待过程中线程被中断, 或者线程等待超时, 则会破坏栅栏. 此时已经进入等待的线程将被唤醒继续执行, 而之后进入 await 方法的线程发现栅栏被破坏, 会直接抛出异常.
-
reset
栅栏被破坏后, 可以通过该方法手工重置栅栏.