美文网首页
LinkedBlockingQueue

LinkedBlockingQueue

作者: 冰鑫925 | 来源:发表于2017-05-24 11:57 被阅读120次

Linked Blocking Queue介绍

Linked Blocking Queue是一个单向链表实现的阻塞队列。该队列按 FIFO(先进先出)排序元素,新元素插入到队列的尾部,并且队列获取操作会获得位于队列头部的元素。Linked Blocking Queue还是可选容量的(防止过度膨胀),即可以指定队列的容量。如果不指定,默认容量大小等于Integer.MAX_VALUE。

Linked Blocking Queue的结构

Paste_Image.png

LinkedBlockingQueue源码分析

创建 LinkedBlockingQueue(int capacity)
添加 offer(E e) 将元素E添加到队列的末尾。

Paste_Image.png

signalNotEmpty()的作用是唤醒notEmpty上的等待线程。

取出take()取出并返回队列的头。若队列为空,则一直等待。

Paste_Image.png

dequeue()的作用就是删除队列的头节点,并将表头指向“原头节点的下一个节点”。
}
signalNotFull()的作用就是唤醒notFull上的等待线程。

遍历iterator()返回一个Iter对象。

Paste_Image.png Paste_Image.png

1 LinkedBlockingQueue继承于AbstractQueue,它本质上是一个FIFO(先进先出)的队列。
2 LinkedBlockingQueue实现了BlockingQueue接口,它支持多线程并发。当多线程竞争同一个资源时,某线程获取到该资源之后,其它线程需要阻塞等待。
3 LinkedBlockingQueue是通过单链表实现的。
head是链表的表头。取出数据时,都是从表头head处插入。
last是链表的表尾。新增数据时,都是从表尾last处插入。
count是链表的实际大小,即当前链表中包含的节点个数。
capacity是列表的容量,它是在创建链表时指定的。
putLock是插入锁,takeLock是取出锁;notEmpty是“非空条件”,notFull是“未满条件”。通 过它们对链表进行并发控制。

相关文章

  • 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/qoinxxtx.html