linkedblockingqueue在java中出队
在linkedblockingqueue中有增加元素的操作,那么对应的删除元素就是出队的操作了。这里我们挑选最常见的take方法来为大家进行演示。在了解了take的加锁方法以及学会队列元素的讨论区分后,进一步的在take实例中对元素的删除,即出队进行实例代码的展示。
1.take的出队使用
(1)使用takeLock加锁;
(2)如果队列空了就阻塞在notEmpty条件上;
(3)否则就出队;
(4)如果出队前元素数量大于1,唤醒其它阻塞在notEmpty条件上的线程;
(5)释放锁;
(6)如果取元素之前队列长度等于容量,就唤醒notFull条件;
2.take的出队实例
public E take() throws InterruptedException {E x;
int c = -1; //设定一个记录变量
final AtomicInteger count = this.count; //获得count
final ReentrantLock takeLock = 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(); //解锁
return x;
}
以上就是linkedblockingqueue在java中出队的方法,相信大家已经在之前的学习中熟练掌握take的用法和锁的原理。在学会本篇内容后,就可以使用linkedblockingqueue处理一些出队问题。
以上是 linkedblockingqueue在java中出队 的全部内容, 来源链接: utcz.com/z/542538.html