JDK
版本:AdoptOpenJDK 11.0.10+9
1 基本概念
ArrayBlockingQueue
实现了 BlockingQueue
接口,底层是基于 数组 的实现。
public class ArrayBlockingQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, java.io.Serializable {
// 队列中的元素
final Object[] items;
......
}
其特性如下:
- 是一种有界的阻塞队列;
- 初始时,必须指定队列的容量,且容量一旦指定,后续不能改变;
- 在队尾插入元素,在队首删除元素;
- 队列满时,插入元素会阻塞线程;队列空时,删除元素会阻塞线程;
- 支持公平、非公平策略,默认为非公平策略。
公平策略:阻塞线程被唤醒后,以最初请求的顺序添加或删除元素;
非公平策略:阻塞线程被唤醒后,谁先抢占到锁,谁就能去添加或删除元素。
2 构造函数
ArrayBlockingQueue
提供了三种构造函数:
// 指定队列初始大小,默认使用非公平策略
public ArrayBlockingQueue(int capacity) {
this(capacity, false);
}
// 指定初始大小,指定使用公平策略还是非公平策略
public ArrayBlockingQueue(int capacity, boolean fair) {
if (capacity <= 0)
throw new IllegalArgumentException();
this.items = new Object[capacity];
lock = new ReentrantLock(fair);
notEmpty = lock.newCondition