控制同时访问资源的线程数量,类似于令牌桶。基于aqs实现
关键用法
Semaphore semaphore = new Semaphore(3,true); semaphore.acquire();//子线程开始前调用 semaphore.release();//同一个子线程结束后调用CountDownLatch
等待其它线程执行完以后再执行。基于aqs实现
ConutDownLatch latch = new CountDownLatch(); latch.countDown();//子线程执行结束后调用 latch.await();//主线程CyclicBarrier 回环栅栏
多个线程等到某个状态后同时执行。基于ReentrantLock+Condition实现。
CyclicBarrier barrier = new CyclicBarrier(5); barrier.await();//子线程开始前调用Exchanger
数据交换,用于线程间的通信。共享变量node,基于cas+park/unpark
Exchanger exchanger = new Exchanger(); exchanger.exchange(...);//交换数据的多个线程调用Phaser
jdk1.7后开始提供,可用来取代CountDownLatch和CyclicBarrier
Phaser phaser = new Phaser(2); //取代CountDownLatch方法 phaser.arrive(); phaser.awaitAdvance(phaser.getphase()); //取代CyclicBarrier方法 phaser.awaitAdvance(0);
新特性
1、动态调整线程个数
2、内部采取树状存储,父节点对子节点无感知,子节点维护父节点



