0%

CyclicBarrier

循环栅栏, 循环执行: 在凑满指定计数后执行指定的方法.

特点:

  • CyclicBarrier 在计数为 0 之后会自动重置, 所以可以复用.
  • 工作线程完成任务之后, 会阻塞等待其他线程完成.

1. API

  • CyclicBarrier(parties, barrierAction)
    必须设置线程数量, 可以设置等待完成后的统一任务

  • await
    当前线程等待其他线程执行到 await 位置, 凑满足够的线程之后, 如果有统一任务, 则先执行一次统一任务, 然后唤醒所有等待线程继续向下执行, 并重置计数.

    如果在等待过程中线程被中断, 或者线程等待超时, 则会破坏栅栏. 此时已经进入等待的线程将被唤醒继续执行, 而之后进入 await 方法的线程发现栅栏被破坏, 会直接抛出异常.

  • reset
    栅栏被破坏后, 可以通过该方法手工重置栅栏.