首页 > 其他分享 >阻塞队列LinkedBlockingQueue

阻塞队列LinkedBlockingQueue

时间:2023-06-11 15:35:22浏览次数:39  
标签:offer 队列 元素 LinkedBlockingQueue 阻塞 put 方法

入队方法:put 和 offer

put方法共做了以下情况的考虑:
(1)队列已满,阻塞等待;
(2)队列未满,创建一个node节点放入队列中,如果放完以后队列还有剩余空间,继续唤醒下一个添加线程进行添加。如果放之前队列中没有元素,放完以后要唤醒消费线程进行消费。

offer方法仅仅对put方法一点改动,当队列没有可用元素的时候,不同于put方法的阻塞等待 (notFull.await();),offer方法直接方法false。

 

出队方法:take 和 poll

take方法看起来就是put方法的逆向操作,它总共做了以下情况的考虑:

  • 队列为空,阻塞等待。
  • 队列不为空,从队首获取并移除一个元素,如果消费后还有元素在队列中,继续唤醒下一个消费线程进行元素移除。如果放之前队列是满元素的情况,移除完后要唤醒生产线程进行添加元素。

poll方法去除了take方法中元素为空后阻塞等待这一步骤,这里也就不详细说了。同理,poll(long timeout, TimeUnit unit)也和offer(E e, long timeout, TimeUnit unit)一样,利用了Condition的awaitNanos方法来进行阻塞等待直至超时。

 

 

 

 

标签:offer,队列,元素,LinkedBlockingQueue,阻塞,put,方法
From: https://www.cnblogs.com/ixtao/p/17472979.html

相关文章

  • STL之优先级队列(堆)的模拟实现与仿函数(8千字长文详解!)
    STL之优先级队列(堆)的模拟实现与仿函数优先级队列的概念优先队列是一种==容器适配器==,根据严格的弱排序标准,==它的第一个元素总是它所包含的元素中最大的==。本质就是一个堆!此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先队列中位于顶部的元素)。......
  • 14.队列的顺序存储
    1.队列的概念1.1队列的定义队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列是一种先进先出(FirstInFirstOut)的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。队头(Front):允许删除的一端,又称队首。队尾(Rear):允许插入的一端。空......
  • 《数据结构与算法》之队列与链表复习
    导言:我们在上一次学习了堆栈的数据结构以后,可以了解到它是受限制的操作,比如我们操作只能在栈顶,现在我们要学习的东西叫做队列,它也是受限制的一种数据结构,它的特点是队头只出数据,而队尾只入数据,它的结构就和它的名字,像我们平时排队一样先来的人肯定要先服务啊,所以它的英文叫做Fri......
  • Python多进程使用队列共享数据协同判断素数
    感谢江西师范大学李雪斌老师提供素材和第一版本代码。问题描述:创建两个队列,qIn用来存储指定范围内的整数,qOut用来存放该范围内的所有素数。创建多个进程,每个进程依次从qIn队列中获取整数,并判断是否为素数,如果是素数则存入qOut。技术要点:1)使用Python标准库multiprocessing创建和管理......
  • RabbitMQ 消息队列处理库存解锁及关单
    添加RMQ配置<!--使用高级消息队列来解决分布式事务一致性--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency>application.properties#=====......
  • Python中提供的各种队列结构
    Python标准库queue提供了LILO队列类Queue、LIFO队列类LifoQueue、优先级队列类PriorityQueue,标准库collections提供了双端队列。例如:>>>fromqueueimportQueue#LILO队列>>>q=Queue()#创建队列对象>>>q.put(0)#在队列尾部插入元素>>>q.put(1)>>>q.put(2)>&......
  • HDU 5437 Alisha’s Party(优先队列模拟)
    思路:题目比较好懂的模拟题,用一个优先队列即可     模拟的时候要注意最后还会再开一次门,把剩下的人全部放进来,开门的时间并不一定是递增的,要自己排个序,还有就是要注意开门的时候是25这种数据,就是到第二个人到了开门,然后可以放5个人进来,这样不处理的话会RE#include<bits/s......
  • 通过cond实现阻塞队列
    packagemainimport( "fmt" "sync" "time")typequeuestruct{ items[]interface{} mutex*sync.Mutex capint readerCond*sync.Cond writerCond*sync.Cond}funcinitQueue(capint)*queue{ q:=&......
  • 高性能消息队列disruptor
    一、概述Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关注。Disruptor是一个开源的Java框架,它被......
  • Python 协程池,异步IO非阻塞式,http 请求
    先写个FlaskdemoimporttimefromflaskimportFlaskapp=Flask(__name__)@app.route('/<id>')defhello(id):time.sleep(2)return'Hello,World!:%s'%idif__name__=='__main__':app.run()协程请求import......