当前位置:网站首页 > 编程语言 > 正文

阻塞队列的实现(阻塞队列如何实现)



⭐ 作者:小胡_不糊涂
🌱 作者主页:小胡_不糊涂的个人主页
📀 收录专栏:JavaEE
💖 持续更文,关注博主少走弯路,谢谢大家支持 💖

阻塞队列是⼀种特殊的队列,遵守 “先进先出” 的原则。

阻塞队列能是⼀种线程安全的数据结构,并且具有以下特性:

  • 当队列满的时候,继续⼊队列就会阻塞,直到有其他线程从队列中取⾛元素。
  • 当队列空的时候,继续出队列也会阻塞,直到有其他线程往队列中插⼊元素。

阻塞队列的⼀个典型应⽤场景就是 “⽣产者消费者模型”。这是⼀种⾮常典型的开发模型。

生产者消费模型:
⽣产者消费者模式就是通过⼀个容器来解决⽣产者和消费者的强耦合问题
⽣产者和消费者彼此之间不直接通讯,⽽通过阻塞队列来进⾏通讯,所以⽣产者⽣产完数据之后不⽤等待消费者处理,直接扔给阻塞队列,消费者不找⽣产者要数据,⽽是直接从阻塞队列⾥取

  1. 阻塞队列就相当于⼀个缓冲区,平衡了⽣产者和消费者的处理能力
  2. 阻塞队列也能使⽣产者和消费者之间解耦

在 Java 标准库中内置了阻塞队列。如果我们需要在⼀些程序中使⽤阻塞队列,直接使⽤标准库中的即可。
在这里插入图片描述

  • BlockingQueue 是⼀个接⼝,真正实现的类是 LinkedBlockingQueue
  • put ⽅法⽤于阻塞式的⼊队列,take ⽤于阻塞式的出队列
  • BlockingQueue 也有 offer, poll, peek 等⽅法,但是这些⽅法不带有阻塞特性

示例:

 

方法

  1. 先实现普通队列–使用数组实现循环队列,保证实现出入队列的操作
  2. 加上线程安全–synchronized
  3. 加上阻塞队列
到此这篇阻塞队列的实现(阻塞队列如何实现)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
                            

版权声明


相关文章:

  • adsl已断开连接是什么意思(adsl已断开连接,以太网正常)2025-02-09 23:00:05
  • mha是什么意思医学上(医学中mha的中文意思是)2025-02-09 23:00:05
  • 幼儿园游戏的分类教案(幼儿游戏分类ppt)2025-02-09 23:00:05
  • w25q256中文资料(w25q32中文资料)2025-02-09 23:00:05
  • py文件闪退,怎么打开它(py文件闪退,根本打不开)2025-02-09 23:00:05
  • gitea迁移(git迁移到gitlab)2025-02-09 23:00:05
  • 直接删除虚拟机会释放内存吗(直接删除虚拟机会释放内存吗)2025-02-09 23:00:05
  • seated做非谓语(seat非谓语的用法)2025-02-09 23:00:05
  • github 免费代理(github 代下)2025-02-09 23:00:05
  • 虚拟u盘怎么删除(u盘虚拟光驱删除)2025-02-09 23:00:05
  • 全屏图片