ArrayBlockingQueue 入队和出队的源码分析
本日我们来聊一聊以数组为数据结构的壅闭队列 ArrayBlockingQueue,它实现了 BlockingQueue 接口,继续了抽象类 AbstractQueue。BlockingQueue 提供了三个元素入队的方法。
boolean add(E e);boolean offer(E e);void put(E e) throws InterruptedException;三个元素出队的方法。
E take() throws InterruptedException;E poll(long timeout, TimeUnit unit) throws InterruptedException;boolean remove(Object o);一起来看看,ArrayBlockingQueue 是如何实现的吧。
初识
首先看一下 ArrayBlockingQueue 的主要属性和构造函数。
属性
//存放元素final Object[] items; //取元素的索引int takeIndex;//存元素的索引int putIndex;//元素的数量int count;//控制并发的锁final ReentrantLock lock;//非空条件信号量private final Condition notEmpty;//非满条件信号量private final Condition notFull;transient Itrs itrs = null;从以上属性可以看出:
[*]以数组的方式存放元素。
[*]用 putIndex 和 takeIndex 控制元素入队和出队的索引。
[*]用重入锁控制并发、包管线程的安全。
构造函数
ArrayBlockingQueue 有三个构造函数,此中 <span style="color: #555555; --tt-darkmode-color: #919191;"><span style="background-color: #EEEEEE; --tt-darkmode-bgcolor: #232323;">public ArrayBlockingQueue(int capacity, boolean fair, Collection
页:
[1]