循环屏障
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同步队列再去唤醒线程执行