• 技术文章 >java >java基础

    linkedblockingqueue在java中出队

    小妮浅浅小妮浅浅2021-01-11 15:31:08原创1889

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

    专题推荐:java linkedblockingqueue出队
    上一篇:java中linkedblockingqueue的增加方法 下一篇:java中DelayQueue是什么

    相关文章推荐

    • java中ArrayBlockingQueue的出队• java ArrayBlockingQueue的方法及不足点• java中linkedblockingqueue用法• linkedblockingqueue在java中的原理• java中linkedblockingqueue的增加方法

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网