队列总结(一)

如何从零到一设计一个MQ消息队列 消息队列整体设计思路 主要是设计一个整体的消息被消费的数据流。 这里会涉及到:消息生产Producer、Broker(消息服务端)、消息消费者Consumer。 1.Producer(消息生产者):发送消息到Broker。 2.Broker(服务端):Broker这个概念主要来自于Apache的ActiveMQ,特指消息队列的服务端。 主要功能就是:把消息从发送端传送到接收端,这里会涉及到消息的... 阅读详情

Queue

Queue接口定义了一个队列必须满足的基本特性,队列作为一个容器,自身继承了Collection接口,同时满足容器的特征。

public interface Queue<E> extends Collection<E> {}

在这里插入图片描述
Queue实现通常不允许插入null元素,尽管某些实现(例如LinkedList )不禁止插入null 。即使在允许null的实现中,也不应将null插入到Queue ,因为null也被poll方法用作特殊的返回值,以指示队列不包含任何元素。

队列通常(但不一定)以 FIFO(先进先出)方式对元素进行排序。但也有不少例外,如优先级队列PriorityQueue,它根据提供的比较器或元素的自然顺序对元素进行排序,再如对元素进行 LIFO(后进先出)排序的 LIFO 队列(或称为堆栈)

队列还提供额外的插入、提取和检查操作。 这些方法中的每一个都以两种形式存在:一种在操作失败时抛出异常,另一种返回一个特殊值( null或false ,取决于操作)。 后一种形式的插入操作是专门为与容量受限的Queue实现一起使用而设计的; 在大多数实现中,插入操作不会失败。

抛出异常返回特殊值
插入addoffer
移除removepoll
检索elementpeek
/**
 * offer方法指定,如果可不违反容量限制(有界队列),立即将指定元素插入此队列。 否则直接返回false。(add方法会抛出异常)
 */
boolean offer(E e);

/**
 * 注意区别于Collection接口中的 boolean remove(Object o)方法
 * 检索并删除此队列的头部。 此方法与poll不同之处仅在于,如果此队列为空,它会引发NoSuchElementException异常。
 * 返回该队列的头元素
 */
E remove();

/**
 * 检索并移除此队列的头部,如果此队列为空,则返回null 。
 * 注意,如果该队列(如LinkedList)支持null元素,那么也可能返回null(尽管可能,但是最好不要如此)
 */
E poll();

/**
 * 检索但不删除此队列的头部。 如果此队列为空,它会引发异常。
 */
E element();

/**
 * 检索但不删除此队列的头部。 如果此队列为空,返回空。
 */
E peek();

介绍完基本的队列属性后,再看一些常用的队列扩展

BlockingQueue

阻塞队列,额外支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中的空间变为可用。BlockingQueue可能有容量限制,默认容量为Integer.MAX_VALUE,通过remainingCapacity方法可以获取队列当前剩余容量。

public interface BlockingQueue<E> extends Queue<E> {}

BlockingQueue实现是线程安全的。 所有排队方法都使用内部锁或其他形式的并发控制以原子方式实现其效果
但是,Collection中多元素操作的方法如addAll不能保证原子性,因为可能在插入部分元素而达到最大容量后,剩余元素无法插入而抛出异常的情况。

BlockingQueue方法有四种形式,处理不能立即满足但可能在未来某个时候满足的操作的方式各不相同:一个抛出异常,第二个返回一个特殊值( null或false ,取决于操作),第三个无限期地阻塞当前线程,直到操作成功,第四个阻塞仅给定的最大时间限制,然后放弃。
在这里插入图片描述

抛出异常返回特殊值阻塞超时
插入add(e)offer(e)put(e)offer(e,time,unit)
移除remove()poll()take()poll(time,unit)
检索elementpeek不适用不适用
boolean offer(E e, long timeout, TimeUnit unit)throws InterruptedException;

E poll(long timeout, TimeUnit unit) throws InterruptedException;

/**
 * 检索并删除此队列的头部,如果此队列为null,则一直阻塞直到队列中插入了元素
 */
E take() throws InterruptedException;

/**
 * 将指定元素插入队列,如果队列有界且此时无可插入位置,则一直阻塞直到队列可插入
 */
void put(E e) throws InterruptedException;

Deque

双端队列,顾名思义,注重于头尾元素,扩展了许多针对头尾的操作方法。此接口支持容量受限的双端队列以及没有固定大小限制的双端队列。

该接口定义了访问双端队列两端元素的方法。 提供了插入、删除和检查元素的方法。 这些方法中的每一个都以两种形式存在:一种在操作失败时抛出异常,另一种返回一个特殊值( null或false ,取决于操作)。 后一种形式的插入操作是专门为与容量受限的Deque实现一起使用而设计的。
在这里插入图片描述
该接口扩展了Queue接口。 当双端队列用作队列时,会产生 FIFO(先进先出)行为, 元素添加在双端队列的末尾并从开头删除。 从Queue接口继承的方法与Deque方法完全等效,如下表所示
在这里插入图片描述
双端队列也可以用作 LIFO(后进先出)堆栈。 应优先使用此接口而不是遗留Stack类。 当双端队列用作堆栈时,元素从双端队列的开头被压入和弹出。 堆栈方法与Deque方法完全等效,如下表所示:
在这里插入图片描述
该接口提供了两种移除内部元素的方法, removeFirstOccurrence和removeLastOccurrence 。
与List接口不同,该接口不支持对元素进行索引访问。

public interface Deque<E> extends Queue<E> {}

在这里插入图片描述

BlockingDeque

阻塞式双端队列,同时继承了上面的两个接口

public interface BlockingDeque<E> extends BlockingQueue<E>, Deque<E> {}

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

对于各个接口的常用实现,还是放在另外的文章中去记录

inferCNV包安装问题及解决办法 InferCNV是一个由broad研究所开发的,利用单细胞转录组数据分析肿瘤细胞拷贝数变异(CNV)的工具。基本思路是在整个基因组范围内,通过计算肿瘤细胞关于参考的“正常”细胞的相对表达,利用滑窗思想对邻近的基因相对表达,计算拷贝数。 先贴一个官方安装说明: 官方infercnv安装说明 安装infercnv包: if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager") BiocManager: 阅读详情

相关推荐

模拟IC设计避坑:手把手教你用Cadence仿真恒定跨导轨到轨运放(附完整工艺库文件)

本文详细解析了使用Cadence仿真恒定跨导轨到轨运放的全流程,涵盖电路原理、工艺库配置、尺寸设计及仿真分析。通过1:3电流镜补偿技术实现跨导稳定,提供CSMC 0.25um工艺下的实战案例,帮助工程师规避设计陷阱,提升模拟IC设计效率。

weixin_30952535的博客 497

一读多写非自旋无锁链表队列实现

现在一说到多线程操作的队列,基本上都会标榜自己是无锁的,这样的无锁基本上都有两大特点: 1. 换了一种锁 利用原子变量自旋,本质还是自旋等锁,其实也是一种锁,只是用了更底层一点。这种无锁,其实也是消耗CPU 2. 数组结构 这样的队列大多都是用数组,数组的好处就是寻址方便,移动的时候只需要原子加1,但不好的地方就是空间分配不够灵活。我要是分配小了,在流量高峰可能就满了,但内存可能还可以足够...

ZZ的博客 2058

VS2022+Qt6保姆级环境配置指南:从插件安装到项目互通全流程

本文提供VS2022与Qt6深度整合的全流程指南,涵盖环境配置、插件安装、项目互通等关键步骤。详细解析编译器版本匹配、跨IDE协作方案及效能优化技巧,帮助开发者高效搭建C++界面设计开发环境,实现软件项目无缝互通。

zero1的博客 735

【数据结构】队列知识点总结--定义;基本操作;队列的顺序实现;链式存储;双端队列;循环队列

队列;队列的顺序实现和链式存储;双端队列;循环队列的知识点总结

小人物,大梦想! 1568

保姆级教程:用YOLOv8n模型在RKNN和Horizon平台完成目标检测(附C++部署代码与性能实测)

本文提供了一份详尽的YOLOv8n模型在RKNN和Horizon平台上的部署指南,涵盖环境配置、模型优化、跨平台适配及性能调优。通过实战案例和C++部署代码,帮助开发者在嵌入式设备上高效实现目标检测,显著提升推理性能。

weixin_42659194的博客 468

Kotlin原生AI Agent框架Koog:为JVM开发者打造类型安全、企业级智能体开发方案

AI Agent作为当前人工智能应用开发的核心范式,通过赋予大语言模型(LLM)自主规划、工具调用和环境交互能力,正在重塑软件智能化进程。其技术原理基于智能体架构,通过提示工程、函数调用和记忆机制,将LLM从单纯的文本生成器转变为能够执行复杂任务的工作流引擎。这一技术价值在于显著降低了构建智能应用的开发门槛,同时保持了高度的灵活性和可扩展性。在实际应用场景中,AI Agent广泛落地于智能客服、代码助手、数据分析自动化等领域,成为连接大模型能力与具体业务需求的关键桥梁。本文聚焦的Koog框架,正是针对JVM

weixin_42594419的博客 396

【图解数据结构】队列全面总结

一、前言 二、基本概念 定义:队列是允许在一端插入,另一端删除的线性表 队头(front):允许删除的一端 队尾(rear):允许插入的一端 特点:先进先出 三、队列的表示和实现 ...

知心宝贝的博客 4341

AI驱动的客户终身价值分析:深入理解公司的收入质量

客户终身价值(Customer Lifetime Value, CLV)是衡量客户在整个生命周期内能为企业带来多少利润的重要指标。传统的CLV计算方法往往过于简化,无法准确反映复杂的客户行为和收入模式。本文旨在介绍如何利用人工智能技术,特别是机器学习方法,构建更精确的CLV预测模型,从而帮助企业深入理解其收入质量。CLV的基本概念和商业意义传统CLV计算方法的局限性基于机器学习的CLV预测方法特征工程和模型选择策略实际应用案例和Python实现首先介绍CLV的基本概念和商业背景。

AI云原生与云计算技术学院 477

数据结构:队列的若干问题总结

队列的定义: 队列( Queue)简称队,只允许一端进行插入,另一端进行删除。前者可以叫“入队”或者“进队”,后者可以叫“出队”或者“离队”。队列和平时在排队过程中的逻辑是一样的,如果要入队,必然插入到线性结构的后方,如果要离队,肯定是从线性结构的前方离开的。这一原则我们叫FIFO(First In First Out)。 队列的存储结构: 1:队列的顺序存储 所谓顺序存储其实就和顺序表的思维差不多,定义一个线性结构,只能表头前出队,只能表头后进队。以下是数据结构: #define Maxsize

weixin_45300283的博客 2972

LPDDR6来了!带你一文看懂它和LPDDR5/5X的差距 + 技术演进逻辑全解析

🧠从速率到架构,从总线宽度到协议设计,LPDDR6 每一个改动都不是拍脑袋做的,它针对的是AI / HPC / 云计算 / 下一代笔记本平台的真实需求。作为工程师的我们,不仅要“用得上”,更要“测得准”,因为没有测试验证,就没有量产落地!🎯LPDDR6不是未来,而是现在进行时!

weixin_43199439的博客 2175

Microsemi Libero使用技巧1——查看芯片资源占用情况

Microsemi Libero使用技巧——查看芯片资源占用情况 前言 与MCU不同,FPGA的资源主要包括:逻辑资源,IO资源,Flash大小,PLL资源,SoC硬核处理器资源等,其中逻辑资源和IO资源是我们主要关心的,本篇文章将介绍,如何通过Microsemi Libero IDE来查看工程的详细资源占用情况。 A2F200M3F的资源 以Microsemi SmartFusion系列A2F2...

whik1194的博客 5697

队列的知识点总结

一个“先进先出”的数据结构。队列是一种只允许在一段进行删除操作,在另一端进行插入操作的线性表。

Lookdrama的博客 721

【RT-DETR涨点改进】全网独家创新、细节涨点改进篇 | ICML 2024 | RT-DETR引入ICB交互式卷积模块和ASB自适应频谱模块,助力目标检测、异常检测有效涨点、含多种创新改进点

RT-DETR目标检测模型通过引入ICB和ASB模块实现性能提升。ICB模块采用多尺度卷积交互,有效捕获局部和长程依赖特征;ASB模块通过自适应频域滤波优化特征表示,降低噪声干扰。两者结合使模型在复杂场景中表现更优,显著提升检测精度和鲁棒性。文章详细介绍了模块原理、代码实现及配置方法,并提供了8种改进版本的YAML配置文件,适用于不同网络结构。这些创新改进为RT-DETR模型提供了高效涨点方案,特别适合复杂背景和高噪声环境下的目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 214

队列基本操作总结

定义数据结构 typedef int DataType; //定义队列结点类型 typedef struct QueueNode { struct QueueNode* _next; DataType _data; }QueueNode; //定义队列类型 typedef struct Queue { QueueNode* front;//队头 QueueNo...

HanSion.Z 5128

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

一读一写情况下,无锁队列如何实现?

一读一写情况下,无锁队列如何实现?其实并不难,先说说一读一写无锁队列的实际应用吧。 读写队列最大的应用是:一个线程收到事件或消息后直接加入到队列,而处理线程读取队列中的事件或消息,并加以处理。在这个模式中,有一个线程负责写,多个处理线程读自己的队列并处理。虽然看起来象是一写多读,其实不然,针对某一事件队列而言,只有一个线程是写一个线程是读。 此示例可以封装成一个Queue类,在KYLib中有T

Kyee编程之道 3349

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

在一读一写限制下,无锁环形队列如何实现?

环形一读一写队列中,不需要担心unsigned long溢出问题,因为溢出后自动回归,相减值还会保留。 示例一(注:Max_Count 必须为 2 的指数,即:2, 4, 8, 16...): // 队列尺寸 #define Max_Count 4096 #define Max_Mask 4095 // = Max_Count - 1 // 变量 void*

Kyee编程之道 4176

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

无锁编程[2]__一读一写无锁队列,其实就是循环队列,一写多读(基于计数器和更新开关),基于CAS实现:多读多写无锁循环队列

转自:http://blog.163.com/xychenbaihu@yeah/blog/static/13222965520133794137729/

woshikalz的专栏 1586

一读一写情况下,无锁环形队列如何实现?

一读一写情况下,无锁环形队列如何实现? -------------------------------------------------------------------------------- 标题: 一读一写情况下,无锁环形队列如何实现? 作者: 叶飞虎 日期: 2009.03.09 -----------------------------------------------

踏雪无痕 3351

算法一看就懂之「 队列 」

算法的系列文章中,之前咱们已经聊过了「 数组和链表 」、「 堆栈 」,今天咱们再来继续看看「 队列 」这种数据结构。「 队列 」和「 堆栈 」比较类似,都属于线性表数据结...

Java笔记虾 1157

聊一聊队列

写在前面: 上一篇文章中我们聊到了栈——漫画趣解什么是栈? 相信很多小伙伴都理解了栈; 那么这次,同样采用漫画形式,给大家聊一聊什么是队列; 思维导图: 什么是队列? ...

程序员的时光 669

从队列到环形队列(JAVA实现)(一)

队列: 概念: 队列是一个有序列表,可以用数组或者链表实现。 遵循先入先出的原则。(先存入队列的数据,先取出,后存入的数据后取出) 例: ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200423160214184.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10...

weixin_43589025的博客 237

两栈一队列和两队列一栈——题集(五)

两栈一队列和两队列一栈——题集(五)         今天分享一下,用两队列实现一个栈和用两个栈实现一个队列,顺便稍微说说字符串替换。        用两队列实现一个栈的源代码和运行界面: 原代码如下: #include using namespace std; #include //用两队列实现一个栈和用两个栈实现一个队列 template class Stack{ public:

就是爱编程-都有人重名的博客 369

学习数据结构(一)——队列

开始学习数据结构,主要是参考LeetCode上的内容,学到什么总结什么。如有不对的地方,请大神指出,一起学习! 队列:先进先出的数据结构 在FIFO(First Input First Output,先进先出)数据结构中,首先处理添加到队列中的第一个元素,执行insert操作,即添加新元素,新加入的元素始终被添加在队列的末尾;执行删除(delete)操作,只能移除第一个元素。就像排...

weixin_38978258的博客 209

队列 c语言 顺序存储结构,顺序队列一

1.队列的概念在开始前,请牢记这句话:队列是一个先进先出的数据结构。队列(queue)是限定在表的一端进行插入,表的另一端进行删除的数据结构,如同栈的学习,请联系前文所学链表,试想一个单链表,我们只能对他的链表表尾进行插入,而只能对链表的表头进行结点的删除,其余一切的操作均不允许,这样强限制性的“链表“,就是我们所说的队列。让我们重新理顺一下定义:队列是一个线性的数据结构,规定这个数据结构只允许在...

weixin_42131367的博客 316

先进先出算法_算法一看就懂之 队列

算法的系列文章中,之前咱们已经聊过了「 数组和链表 」、「 堆栈 」,今天咱们再来继续看看「 队列 」这种数据结构。「 队列 」和「 堆栈 」比较类似,都属于线性表数据结构,并且都在操作上受到一定规则约束,都是非常常用的数据类型,咱们掌握得再熟练也不为过。一、「 队列 」是什么? 队列(queue)是一种先进先出的、操作受限的线性表。队列这种数据结构非常容易理解,就像我们平时去超市买东西...

weixin_39627405的博客 858
上一篇: EventBus
下一篇: 序列化writeObject与readObject
MrMoving
博客等级 码龄10年 54粉丝 145原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值