美文网首页
LinkedBlockingQueue

LinkedBlockingQueue

作者: kokokokokoishi | 来源:发表于2019-07-11 13:20 被阅读0次

简介

LinkedBlockingQueue 底层结构为单项链表,拥有两把锁 takeLock 和 putLock, 以及对应的两个Condition,notEmpty 和 notFull, 维护了两个引用,分别指向链表的首尾,其中head 为 空值节点

我们先看下put 1562821538(1).jpg

在进行put操作时,会先对put加锁,保证同一时刻只有一个线程可以执行put, 当队列已满时,notFull等待,
当被唤醒时,重新检查条件,成功则执行入队,同时如果队列尚未满,则会再次signal notFull,让别的阻塞在put上的线程有机会执行put,最后,若该线程认为队列有空变为非空(c ==0), 则会signal notEmpty

对于take则类似


1562822077(1).jpg

总结

与ArrayBlockingQueue相比,LinkedBlockingQueue 维护了两把锁,对put 和 take 分别维护了一把锁,所以在
LinkedBlockingQueue ,出入队是可以同时进行的,所以适用于需要频繁的执行生产 消费的场景,而ArrayBlockingQueue只有一把锁,同一时刻put take 只能有一个进行,效率会低一些

相关文章

  • Java LinkedBlockingQueue

    本章介绍JUC包中的LinkedBlockingQueue。目录 LinkedBlockingQueue介绍 Li...

  • LinkedBlockingQueue

    一、LinkedBlockingQueue是什么?LinkedBlockingQueue是一个线程安全的阻塞队列,...

  • LinkedBlockingQueue

  • LinkedBlockingQueue

    LinkedBlockingQueue是基于链表的阻塞先进先出队列,可以指定一个最大的长度限制以防止过度扩展,未指...

  • LinkedBlockingQueue

    接ArrayBlockingQueue,这里我谈下我对LinkedBlockingQueue的理解。 由阻塞队列的...

  • LinkedBlockingQueue

    Linked Blocking Queue介绍 Linked Blocking Queue是一个单向链表实现的阻塞...

  • LinkedBlockingQueue

    简介 LinkedBlockingQueue 底层结构为单项链表,拥有两把锁 takeLock 和 putLock...

  • LinkedBlockingQueue

    put offer poll take peek remove

  • LinkedBlockingQueue

    LinkedBlockingDeque 与 LinkedBlockingQueue 对比 LinkedBlocki...

  • LinkedBlockingQueue

    方法说明解释add增加一个元索如果队列已满,则抛出一个IIIegaISlabEepeplian异常offer添加一...

网友评论

      本文标题:LinkedBlockingQueue

      本文链接:https://www.haomeiwen.com/subject/bwirkctx.html