CountdownLatch && Semaphore && CyclicBarirer

这三都是使用了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

原文地址:https://www.cnblogs.com/hansc-blog/p/9406339.html