linkedblockingqueue在java中出队

在linkedblockingqueue中有增加元素的操作,那么对应的删除元素就是出队的操作了。这里我们挑选最常见的take方法来为大家进行演示。在了解了take的加锁方法以及学会队列元素的讨论区分后,进一步的在take实例中对元素的删除,即出队进行实例代码的展示。

1.take的出队使用

(1)使用takeLock加锁;

(2)如果队列空了就阻塞在notEmpty条件上;

(3)否则就出队;

(4)如果出队前元素数量大于1,唤醒其它阻塞在notEmpty条件上的线程;

(5)释放锁;

(6)如果取元素之前队列长度等于容量,就唤醒notFull条件;

2.take的出队实例

publicEtake()throwsInterruptedException{
Ex;
intc=-1;//设定一个记录变量
finalAtomicIntegercount=this.count;//获得count
finalReentrantLocktakeLock=this.takeLock;
takeLock.lockInterruptibly();//加锁
try{
while(count.get()==0){//如果没有元素,那么就阻塞性等待
notEmpty.await();
}
x=dequeue();//一定可以拿到。
c=count.getAndDecrement();
if(c>1)
notEmpty.signal();//报告还有元素,唤醒队列
}finally{
takeLock.unlock();
}
if(c==capacity)
signalNotFull();//解锁
returnx;
}

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

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

昵称

取消
昵称表情代码图片

    暂无评论内容