可循环使用的屏障。它要做的事是让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
    CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

    1. package zhao.thread;
    2. import java.util.concurrent.BrokenBarrierException;
    3. import java.util.concurrent.CyclicBarrier;
    4. /**
    5. * @Author zjl
    6. * @Date 2018/10/17 19:16
    7. */
    8. public class CyclicBarrierTest {
    9. static CyclicBarrier cyclicBarrier = new CyclicBarrier(2);
    10. public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
    11. new Thread(() -> {
    12. try {
    13. cyclicBarrier.await();
    14. } catch (InterruptedException e) {
    15. e.printStackTrace();
    16. } catch (BrokenBarrierException e) {
    17. e.printStackTrace();
    18. }
    19. System.out.println(1);
    20. }).start();
    21. cyclicBarrier.await();
    22. System.out.println(2);
    23. }
    24. }