这三都是使用了AQS的共享方式。其中 CyclicBarirer 是基于 reentainLock , 另外的是 直接基于AQS (tryAcquireShare && tryReleaseShare)
1、CountdownLatch,门栓
await() --> 同步队列waiting,park
countDown() --> count == 0 ,依次通知所有线程继续执行,unpark
一组 await() 的线程,等待着 count == 0 ,继续执行。
2、CyclicBarirer ,循环屏障
一组线程到达屏障 后继续执行。
await() --> != 0 阻塞在condition队列上 , == 0 -->sinalAll()
循环重置 reset()
3、Semaphore 信号量 ,操作系统的信号量可以为负数,表示等待的线程数
acquire() --> 有许可继续执行,没有许可 同步队列waiting,park
release() --> 增加许可,叫醒同步队列上的线程,unpark
限制并行程度,dubbo 服务端 限制最大并行数采用的semaphore