3 构造方法
3.1 无参
注意这是没有无参构造方法的哦!必须设置容量!
3.2 有参
- 创建具有给定(固定)容量和默认访问策略(非公平)的ArrayBlockingQueue
- 创建具有给定(固定)容量和指定访问策略的ArrayBlockingQueue
- 创建一个具有给定(固定)容量,指定访问策略并最初包含给定集合的元素的ArrayBlockingQueue,该元素以集合的迭代器的遍历顺序添加.
fair 参数
指定读写锁是否公平
- 公平锁,锁竞争按先来先到顺序
- 非公平锁,锁竞争随机
3 新增数据
ArrayBlockingQueue有不同的几个数据添加方法,add、offer、put方法,数据都会按照 putIndex 的位置新增.
3.1 add
- 如果可以在不超过队列容量的情况下立即将指定元素插入此队列的尾部,则在成功插入时返回true,如果此队列已满则抛出IllegalStateException.
- 调用的是抽象父类 AbstractQueue的 add 方法
offer
- 之后又是调用的自身实现的 offer 方法.
enqueue
在当前放置位置插入元素,更新并发出信号.
仅在持有锁时可以调用
- 内部继续调用入队方法
- 类似的看 put 方法.
3.2 put
- 将指定的元素插入此队列的末尾,如果队列已满,则等待空间变为可用.
- 实现类似 add,不再赘述.
4 取数据
从队首取数据,我们以 poll 为例看源码.
4.1 poll
dequeue
- 提取当前位置的元素,更新并发出信号.仅在持有锁时可调用.