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

队列的详解

什么是队列?

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

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

阻塞队列:

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

非阻塞队列

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

阻塞队列都实现了 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:内部基于数组实现,线程不安全的队列
posted @   深夜小码农  阅读(362)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示