java ArrayBlockingQueue的方法及不足点

提到ArrayBlockingQueue的方法,想必大家都不陌生,我们在入队和出队的时候,接触了不少这方面的函数。当然ArrayBlockingQueue中的方法也不止于此,今天我们就全部为大家罗列出来,也算是做一个学习方向上的指引。然后就其中的peek方法带来实例介绍,并说明ArrayBlockingQueue使用的不足之处。

1.ArrayBlockingQueue函数列表

//创建一个带有给定的(固定)容量和默认访问策略的ArrayBlockingQueue。
ArrayBlockingQueue(intcapacity)
//创建一个具有给定的(固定)容量和指定访问策略的ArrayBlockingQueue。
ArrayBlockingQueue(intcapacity,booleanfair)
//创建一个具有给定的(固定)容量和指定访问策略的ArrayBlockingQueue,它最初包含给定collection的元素,并以collection迭代器的遍历顺序添加元素。
ArrayBlockingQueue(intcapacity,booleanfair,Collection<?extendsE>c)

//将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回true,如果此队列已满,则抛出IllegalStateException。
booleanadd(Ee)
//自动移除此队列中的所有元素。
voidclear()
//如果此队列包含指定的元素,则返回true。
booleancontains(Objecto)
//移除此队列中所有可用的元素,并将它们添加到给定collection中。
intdrainTo(Collection<?superE>c)
//最多从此队列中移除给定数量的可用元素,并将这些元素添加到给定collection中。
intdrainTo(Collection<?superE>c,intmaxElements)
//返回在此队列中的元素上按适当顺序进行迭代的迭代器。
Iterator<E>iterator()
//将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量),在成功时返回true,如果此队列已满,则返回false。
booleanoffer(Ee)
//将指定的元素插入此队列的尾部,如果该队列已满,则在到达指定的等待时间之前等待可用的空间。
booleanoffer(Ee,longtimeout,TimeUnitunit)
//获取但不移除此队列的头;如果此队列为空,则返回null。
Epeek()
//获取并移除此队列的头,如果此队列为空,则返回null。
Epoll()
//获取并移除此队列的头部,在指定的等待时间前等待可用的元素(如果有必要)。
Epoll(longtimeout,TimeUnitunit)
//将指定的元素插入此队列的尾部,如果该队列已满,则等待可用的空间。
voidput(Ee)
//返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的其他元素数量。
intremainingCapacity()
//从此队列中移除指定元素的单个实例(如果存在)。
booleanremove(Objecto)
//返回此队列中元素的数量。
intsize()
//获取并移除此队列的头部,在元素变得可用之前一直等待(如果有必要)。
Etake()
//返回一个按适当顺序包含此队列中所有元素的数组。
Object[]toArray()
//返回一个按适当顺序包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
<T>T[]toArray(T[]a)
//返回此collection的字符串表示形式。
StringtoString()

2.peek方法实例

读取队列中队首的元素,不会删除该元素。

//获取元素,元素不出队
publicEpeek(){
//上锁
finalReentrantLocklock=this.lock;
lock.lock();
try{
//调用itemAt方法获取元素
returnitemAt(takeIndex);//nullwhenqueueisempty
}finally{
//释放锁资源
lock.unlock();
}
}

3.ArrayBlockingQueue缺点

1)队列长度固定且必须在初始化时指定,所以使用之前一定要慎重考虑好容量;

2)如果消费速度跟不上入队速度,则会导致提供者线程一直阻塞,且越阻塞越多,非常危险;

3)只使用了一个锁来控制入队出队,效率较低

原文来自:https://www.py.cn

© 版权声明
THE END
喜欢就支持一下吧
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容