ArrayBlockingQueue
1. 前言
- 通过循环数组实现的线程安全的有界阻塞队列
- FIFO队列
- 内部通过互斥锁ReentrantLock来实现多线程对竞争资源的互斥访问
2. 源码分析
2.1 数据结构
1 | public class ArrayBlockingQueue<E> extends AbstractQueue<E> |
UML类图如下:
2.2 核心函数
- 构造函数
1 | public ArrayBlockingQueue(int capacity) { |
- 添加元素:offer(E e)
1 | //将e插入阻塞队列尾部,如果队列已满,返回false; 否则插入成功,返回true |
实际调用enqueue(E x)方法:
1 | private void enqueue(E x) { |
- 取出元素: take()
1 | //取出阻塞队列的头部元素并返回,若队列为空则等待 |
实际调用的dequeue()方法:
1 | private E dequeue() { |