循环屏障
CyclicBarrier cyclicBarrier = new CyclicBarrier(4);for (int i = 0; i < 10; i++) {new Thread(() -> {try {cyclicBarrier.await();System.out.println(Thread.currentThread().getName() + "执行通过");} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}}).start();}System.out.println("所有线程执行完成");
这个锁就好比是打麻将三个线程不能执行,一定要等满四个才能一起执行,没有满足就一直等待
实现原理中在没有满足放行以前是一个条件队列,数据结构是单向链表,当满足的时候先把条件队列转为AQS同步队列再去唤醒线程执行
