首页 > 其他分享 >队列(阻塞队列、非阻塞队列)的详解

队列(阻塞队列、非阻塞队列)的详解

时间:2023-11-06 15:57:56浏览次数:19  
标签:队列 元素 阻塞 无界 链表 详解 线程

队列的详解

什么是队列?

用来存储一条条消息(线程)的容器是一个对列。 队列是一种特殊的线性表,遵循先入先出、后入后出的基本原则

什么是阻塞队列,什么是非阻塞队列?

阻塞队列:

添加元素时,超过总数则会进行等待(阻塞)。删除元素时,队列为空则会进行等待(阻塞)。

非阻塞队列

不管什么情况下都不会阻塞。

阻塞队列都实现了 BlockingQueue接口

什么是有界队列,什么是无界队列?

有界:

有界限,大小长度受限制

无界

无限大小,其实说是无限大小,其实是有界限的,只不过超过界限时就会进行扩容,就行ArrayList 一样,在内部动态扩容

单向链表和双向链表

单向链表 :

每个元素中除了元素本身之外,还存储一个指针,这个指针指向下一个元素;。

双向链表 :

除了元素本身之外,还有两个指针,一个指针指向前一个元素的地址,另一个指针指向后一个元素的地址 。

队列常用方法

方法 作用
add 添加一个元素,返回true 如果队列已满,则抛出异常IllegalStateException
remove 移除队列头部元素,并返回该元素值 如果队列为空,则会抛出NoSuchElementException
element 获取队列头部元素 如果队列为空,则会抛出NoSuchElementException
offer 添加一个元素,返回true 如果队列已满,则返回false
poll 移除队列头部元素,并返回该元素值 如果队列已满,则返回false
peek 获取队列头部元素 如果队列已满,则返回false
put 添加一个元素 如果队列满,则阻塞
take 移除队列头部元素,并返回该元素值 如果队列满,则阻塞
阻塞队列:
ArrayBlockingQueue: 数组结构组成的有界阻塞队列
LinkedBlockingQueue:链表结构组成的有界阻塞队列
SynchronousQueue:不存储元素的阻塞队列,直接提交给线程不保存它们
PriorityBlockingQueue:支持优先级排序的无界阻塞队列
DelayQueue:使用优先级队列实现的无界阻塞队列,只有在延迟期满时才能从中提取元素
LinkedTransferQueue:由链表结构组成的无界阻塞队列。与SynchronousQueue类似,还含有非阻塞方法
LinkedBlockingDeque:由链表结构组成的双向阻塞队列
非阻塞队列:
ConcurrentLinkedQueue:单向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全,内部基于节点实现
ConcurrentLinkedDeque:双向链表结构的无界并发队列, 非阻塞队列,由CAS实现线程安全    
PriorityQueue:内部基于数组实现,线程不安全的队列

标签:队列,元素,阻塞,无界,链表,详解,线程
From: https://www.cnblogs.com/snowflow/p/17812866.html

相关文章

  • Oracle创建表语句(Create table)语法详解及示例
     创建表(Createtable)语法详解1. ORACLE常用的字段类型ORACLE常用的字段类型有VARCHAR2(size)可变长度的字符串,必须规定长度CHAR(size)固定长度的字符串,不规定长度默认值为1NUMBER(p,s)数字型p是位数总长度,s是小数的长度,可存负数最长38位.不够位时会四舍五入.......
  • S参数详解
    一介绍目前常见的S参数模型文件有两种格式:Touchstone和Citifile,常用的是Touchstone格式,在各种仿真和测试仪表上得到了充分的支持,所以本文仅仅对Touchstone格式做说明。Touchstone文件,也就是我们经常看到的Snp文件,一般我们从厂家拿到的、从网络分析仪测试得到的和从......
  • Unity DOTS中ECS核心架构详解
    最近DOTS终于发布了正式的版本, 我们来分享一下DOTS中ECS的几个关键概念与结构,方便大家上手学习掌握Unity DOTS开发。 ECS中的World  Unity DOTS ECS架构中所有的Entity都是被放到了World对象里面,每个Entity在World里面都有唯一的Id号。Unity DOTS 可以同时支持很多个......
  • Java去除字符串中空格的方法详解
    1、方法str.trim();str.replace("","");str.replaceAll("","");str.replaceAll("+","");str.replaceAll("\\s*","");\\s*可以匹配空格、制表符、换页符等空白字符的其中任意一个。 2、示例packagetest;publicc......
  • 基础数据类型详解——
    1.字符集和编码字符集(CharacterSet)是一种定义了一组字符、符号和控制符号的集合,这些字符通常用于书写和表示文本信息。字符集可以包括字母、数字、标点符号、特殊符号、控制字符等。电脑如何进行存储文字信息01 <=>1010101010<=>二进制转化成十进制<=>88电脑如何进行......
  • Redis分布式缓存、AOF与RDB详解
    分布式缓存单点Redis的问题1.数据丢失问题Redis是内存存储,服务重启可能会丢失数据2.并发能力问题单节点Redis并发能力虽然不错,但也无法满足如618这样的高并发场景3.故障恢复问题如果Redis宕机,则服务不可用,需要一种自动的故障恢复手段4.存储能力问题Redis基于内存,单节点能存储的数据......
  • Spring Boot 3系列之-启动类详解
    SpringBoot是一个功能强大、灵活且易于使用的框架,它极大地简化了Spring应用程序的开发和部署流程,使得开发人员能够更专注于业务逻辑的实现。在我们的SpringBoot3系列之一(初始化项目)文章中,我们使用了Spring官方网站生成的SpringBoot项目作为示例。在该项目中,我们可以找到一个名......
  • vue 网络图片访问不到,403的解决办法(详解)
    index.html中添加 <metaname="referrer"content="no-referrer"/>原因:防盗链的机制:通过页面的referrer信息,判断访问者来源,是否本站点,然后对图片等请求作出相应no-referrer:1、整个Referer首部包含了当前请求页面的来源页面的地址,即表示当前页面是通过此来源页面里的链接进......
  • Maven详解
    一.前言   以前做过的项目中,没有真正的使用过Maven,只知道其名声很大,其作用是用来管理jar包的。最近一段时间在项目过程中使用Maven,用Maven构建的web项目,其项目结构只停留在了解阶段,没有深入的使用与理解,刚好最近看了一篇关于Maven的详解;就开始深入学习一下Maven的具体应用。......
  • 【MySQL】MVCC机制、ReadView数据结构、匹配规则详解
    (目录)MySQLMVCC机制1.隔离级别在MySQLInnoDB存储引擎下,RC、RR基于MVCC(多版本并发控制)进行并发事务控制MVCC是**基于”数据版本”**对并发事务进行访问2.场景分析UNDO_LOG不是会被删除吗?中间数据万一被删了版本链不就断了?UNDO_LOG版本链不是立即删除,MySQL确保版......