1,简介
1)BlockingQueue接口定义:
继承Queue接口,并且支持两个附加操作的队列。additionally supports operations
获取元素时,等待队列非空。wait for the queue to become non-empty when retrieving an element
存储元素时,等待队列可用。wait for space to become available in the queue when storing an element
2)应用场景:常用于生产者消费者场景
生产者往阻塞队列中添加元素,当队列满时,阻塞线程等待队列可用
消费者从阻塞队列中获取元素,当队列空时,阻塞
3)队列操作
Queue提供:add、remove、element, offer、poll、peek
阻塞队列额外操作:put、take,超时offer、超时poll
4)额外操作
put:插入元素,如果必要的话阻塞等待队列可用。Inserts the specified element into this queue, waiting if necessary for space to become available.
超时offer:插入元素,最多阻塞等待time超时时间队列可用。waiting up to the specified wait time if necessary for space to become available.
5)生产者消费者模型
6)JDK实现类列表
公平访问队列:等待的线程在获取锁竞争时,按照等待时间,先等待的先获取后等待的后获取
非公平访问:获取的时候,所有等待的线程都有可能获取到锁
ReentrantLock:控制公平锁和非公平锁,公平锁会降低队列性能,默认使用非公平锁
2,ArrayBlockingQueue数组实现的有界队列,ReentrantLock+条件队列
put实现
take实现
超时实现,基于条件队列awaitNanos
3,LinkedBlockingQueue链表实现的capacity或者MAX_VALUE的队列
put实现
take实现
4,PriorityBlockingQueue基于堆结构的优先级无界阻塞队列
put实现
take实现
5,SynchronousQueue不存储元素的阻塞队列
Transfer接口
put操作的时候e值为数据data,take操作的时候e值为null
TransferQueue实现
队列为空或者是和队尾数据类型一致
awaitFulfill方法,终止条件是s的值是否被修改。如s节点是data节点,就会被修改为null;如果是request节点,就会被修改为data
put和take实现