tools

45 阅读1分钟

一、CountDownLatch了解吗?

  1. 允许一个或多个线程一直等待,直到这些线程完成它们的操作
  2. 是基于AQS实现的
  3. countDown()利用CAS将state-1,await()就是让头节点一直等待直到state为0

二、CyclicBarrier了解吗?

  1. 当线程到达某状态后,暂停下来等待其他线程,等到所有线程均到达以后,才继续执行
  2. 利用ReentrantLock和Condition实现,自身维护了count和parties变量
  3. 每次调用await将count-1,并将线程加入到condition队列上。等到count为0时,则将condition队列的节点移交至AQS队列,并全部释放。

三、Semaphore了解吗?

用于控制同时访问的线程个数,来达到限制通用资源访问的目的,其原理是通过acquire()获取一个许可,如果没有就等待,而release()释放一个许可