LinkedBlockingQueue简介 定义 源码分析 参考
LinkedBlockingQueue是一个单向链表实现的阻塞队列,先进先出的顺序。支持多线程并发操作。
相比于数组实现的ArrayBlockingQueue的有界,LinkedBlockingQueue可认为是无界队列。多用于任务队列。
LinkedBlockingQueue继承AbstractQueue,实现了BlockingQueue,Serializable接口。内部使用单向链表存储数据。默认初始化容量是Integer最大值。
插入和取出使用不同的锁,putLock插入锁,takeLock取出锁,添加和删除数据的时候可以并行。多CPU情况下可以同一时刻既消费又生产。
源码分析
jdk1.7.0_71
put(E)方法
向队列尾部添加元素,队列已满的时候,阻塞等待。
1 |
public void put(E e) throws InterruptedException { |
offer(E)方法
向队列尾部添加元素,队列已满的时候,直接返回false。
1 |
public boolean offer(E e) { |
不做过多分析,发现下面参考处的文章写得不错,建议看下。