美文网首页
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 只能有一个进行,效率会低一些

    相关文章

      网友评论

          本文标题:LinkedBlockingQueue

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