概述
一个用数组实现的有界阻塞队列,会自动阻塞,此队列按照先进先出FIFO原则对元素进行排序。支持公平锁和非公平锁。提供方法包括:
boolean add(E e)
:在容量不足时,抛出异常。void put(E e)
:在容量不足时,阻塞等待。boolean offer(E e)
:不阻塞,容量不足时返回false,当前新增数据操作放弃。boolean offer(E e, long timeout, TimeUnit unit)
:容量不足时,阻塞times时长(单位为timeunit),如果在阻塞时长内,有容量空闲,新增数据返回true。如果阻塞时长范围内,无容量空闲,放弃新增数据,返回false。int drainTo()
:将队列中的多个元素转移到指定的集合中,如果队列为空,则不执行任何操作。如果队列中有null,则转移null值;如果指定集合容量不足,则只转义部分;每次调用后原队列元素被移除
构造函数
public ArrayBlockingQueue(int capacity, boolean fair) {
if (capacity <= 0)
throw new IllegalArgumentException();
this.items = new Object[capacity];
lock = new ReentrantLock(fair);
notEmpty = lock.newCondition();
notFull = lock.newCondition();
}
从构造函数可以看出来,一个ReentrantLock是阻塞实现的核心,其构造了两个Condition,一个代表队满,一个代表队空。
传入了一个capacity,通过这个值构造数组,表示这个队列的长度。
评论区