循环屏障

    1. CyclicBarrier cyclicBarrier = new CyclicBarrier(4);
    2. for (int i = 0; i < 10; i++) {
    3. new Thread(() -> {
    4. try {
    5. cyclicBarrier.await();
    6. System.out.println(Thread.currentThread().getName() + "执行通过");
    7. } catch (InterruptedException | BrokenBarrierException e) {
    8. e.printStackTrace();
    9. }
    10. }).start();
    11. }
    12. System.out.println("所有线程执行完成");

    这个锁就好比是打麻将三个线程不能执行,一定要等满四个才能一起执行,没有满足就一直等待

    实现原理中在没有满足放行以前是一个条件队列,数据结构是单向链表,当满足的时候先把条件队列转为AQS同步队列再去唤醒线程执行