1. 介绍(作用,特性)
BlockingQueue是阻塞队列,适用于生产者消费者模式,特性是在移除元素和加入元素时,遇到空队列和满队列会做出相应的阻塞操作。
1.1 移除
在空队列时,使用移除(take)会先阻塞线程,等待元素添加进来才唤醒移除线程实现移除功能
1.2 加入
在满队列时,使用加入(put)会先阻塞线程,等待元素移除一个后才唤醒添加线程实现添加功能
2. 原理解析
2.1 ReentrantLock:锁以及Condition需要
2.2 Condition:阻塞和唤醒线程(利用了LockSupport.park,unpark)
当移除元素时,会唤醒满队列导致的阻塞线程
当加入元素时,会唤醒空队列导致的阻塞线程
3. 代码解析
3.1 图解:
3.2 ArrayBlockingQueue源码解析
|
|