Fork me on GitHub

BlockingQueue 阻塞队列

BlockingQueue阻塞队列

A Queue that additionally supports operations that wait for the queue to become non-empty when retrieving an element, and wait for space to become available in the queue when storing an element.

就是一种队列但是又在插入和取数据的时候支持了额外的等待阻塞。

关于无界队列和有界队列

队列的底层结构无非就是Array,或者是LinkedList。一般来说Array基本都是有界的,因为定义Array是有大小的,但是Array有的情况下会扩容。所以大小固定的Array是有界的。同理LinkedList也是只要初始化定义了一个大小,基本都可以认为是有界,当然如果大小是Integer.MaxValue这种数量级,也可以认为是无界【毕竟实际很难达到这种边界】。

ArrayBlockingQueue

一种基于数组的有界阻塞队列。支持FIFO,默认不是公平队列

LinkedBlockingQueue

官方的介绍叫An optionally-bounded blocking queue based on linked nodes.

就是说有无边界是可以选的。

PriorityBlockingQueue

官方介绍An unbounded blocking queue that uses the same ordering rules as class PriorityQueue and supplies blocking retrieval operations

这个队列是base on Array的无界队列,因为它会自动扩容。因为是Priority,所以是优先级高的先出队。

DelayQueue

DelayQueue 也是一个优先队列,不过它的优先级是和expire关联的,而且这个队列是基于数组的无界队列。而且进入队列的element必须是实现Delayed接口的。

SynchronousQueue

最难理解的就就是SynchronousQueue ,这个队列没有容量,所以每次入队必须匹配一次出队操作,否则就会阻塞;反之出队操作也必须匹配一个入队操作,否则也会阻塞。该队列使用CAS保证并发,在有的线程池类型中就使用了这种特殊的阻塞队列。

Tag

queue BlockingQueue

posted @   WilliamCui  阅读(71)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 【非技术】说说2024年我都干了些啥
点击右上角即可分享
微信分享提示