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

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-21
  • 2021-12-09
  • 2021-06-19
  • 2022-01-29
  • 2021-06-14
  • 2021-08-13
猜你喜欢
  • 2022-12-23
  • 2021-11-10
  • 2021-11-27
  • 2021-07-08
  • 2021-11-15
相关资源
相似解决方案