Semaphore:信号量,提供了资源数量的并发访问控制
semaphore.acquire占用资源
semaphore.release释放资源
基于AQS,资源总数即state初始值acquire对state进行CAS减操作,release对state进行CAS增操作
CountDownLatch:栅栏,可以简单理解为主线程等N个worker线程执行完后再执行
主线程await(),worker线程countDown()
基于AQS阻塞队列来实现的,可以让多个线程阻塞在state=0的条件上,通过countDown方法一直减少state值,减到0后一次性唤醒所有阻塞线程
CyclicBarrier :循环栅栏,N个线程做同一件事,分为阶段1,2,3,都完成阶段1再进行下一阶段。
通过ReentranLock和Condition实现,CyclicBarrier里包含这俩,await的时候就锁住,到达condition时就释放锁
Exchanger:线程之间交换数据。通过exchange方法,核心机制就是CAS+park(挂起)/unpark(唤醒)
Phaser:jdk1.7后加入的工具类,可代替CountDownLatch和CyclicBarrier。新特性就是可以动态的调节线程个数,拥有层次是树状结构
