- BlockingQueue

- 常用方法
- offer/poll 不阻塞; put/take 阻塞
- AQS: AbstractQueuedSynchronizer,是并发容器
- 常用实现类
- ArrayBlockingQueue
- 可以用来参考阻塞队列的写法
- LinkedBlockingQueue
- 为了提高并发度,用2把锁,分别控制队头、队尾的操作。意味着在put(…)和put(…)之间、take()与take()之间是互斥的,put(…)和take()之间并不互斥。但对于count变量,双方都需要操作,所以必须是原子类型。
- 因为各自拿了一把锁,所以当需要调用对方的condition的signal时,还必须再加上对方的锁,
就是signalNotEmpty()和signalNotFull()方法。
- ArrayBlockingQueue
- 同步工具类:
- Semaphore : 大学生抢座、抢资源
- CountDownLatch : 主任务等待子任务完成
- CyclicBarrier

- Exchanger :线程之间交换数据
- // 如果没有其他线程调用exchange,线程阻塞,直到有其他线程调
用exchange为止。String otherData = exchanger.exchange(“交换数据1”);
- // 如果没有其他线程调用exchange,线程阻塞,直到有其他线程调
- Phaser
- 从JDK7开始,新增了一个同步工具类Phaser,其功能比CyclicBarrier和CountDownLatch更加强
大。- 可以动态修改线程数量
- 可以有更多的线程层次
- 从JDK7开始,新增了一个同步工具类Phaser,其功能比CyclicBarrier和CountDownLatch更加强
