本文将通过剖析ArrayBlockingQueue
的源码来介绍其实现原理
关于ReentrantLock
的基本内容请参考「并发 - JUC - ReentrantLock - 源码剖析」,本文不再赘述
关于ConditionObject
的基本内容请参考「并发 - JUC - ConditionObject - 源码剖析」,本文不再赘述
基础
ArrayBlockingQueue
是基于数组
实现的有界阻塞
队列,ArrayBlockingQueue
是通过ReentrantLock
和ConditionObject
来实现同步的
源码分析
核心结构
1 | public class ArrayBlockingQueue<E> extends AbstractQueue<E> |
构造函数
1 | public ArrayBlockingQueue(int capacity) { |
逻辑示意图
1 | public static void main(String[] args) { |

add(E e)
1 | // 入队操作列表,都比较类似,仅仅分析add(E e) |
1 | // From ArrayBlockingQueue |
AbstractQueue.add
1 | // From AbstractQueue |
offer(E e)
1 | // From ArrayBlockingQueue |
1 | private static void checkNotNull(Object v) { |
enqueue
1 | // From ArrayBlockingQueue |
poll()
1 | // 入队操作列表,都比较类似,仅仅分析poll() |
1 | // From ArrayBlockingQueue |
dequeue
1 | // From ArrayBlockingQueue |