指尖代码 发表于 2021-9-14 00:00:00

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]
查看完整版本: ArrayBlockingQueue 入队和出队的源码分析