linkedblockingqueue在java中出队

linkedblockingqueue在java中出队,第1张

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处理一些出队问题。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/3017584.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-28
下一篇 2022-09-28

发表评论

登录后才能评论

评论列表(0条)

保存