当前位置: 首页 > article >正文

阻塞队列——Java

一、前言

        阻塞队列也是队列的一种,但是带有阻塞性质。但是这种阻塞情况是极端情况,在生产、消费者模型中,当生产者与消费者不协调时,就会出现阻塞情况。

二、特性

线程安全 + 阻塞特性

若队列为空,当尝试出队列时,就会阻塞等待,当其他线程添加元素后就停止阻塞;

若队列为满,当尝试入队列时,就会阻塞等待,当其他线程移除元素后就停止阻塞;

三、常用的阻塞队列

1.ArrayBlockingQueue

        ArrayBlockingQueue是基于顺序表实现的队列,在使用时需要传入初始容量,代码如下:

BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(100);

2.LinkedBlockingQueue

        LinkedBlockingQueue是基于链表实现的队列,同样也需要传入初始容量,代码如下:

BlockingQueue<Integer> queue = new LinkedBlockingQueue<>(100);

四、常用的方法

        由于阻塞队列也属于队列,所以队列中的方法阻塞队列也能用,如下图所示:

         但是这些方法都没有阻塞特性,所以在阻塞队列中有两个专门入队列和出队列的方法

1.put

        put与offer一样,都是向队列中添加元素,但是put具有阻塞特性;

2.take

        take与poll一样,都是出队列操作,但是take具有阻塞特性;

五、阻塞队列的优势

1、解耦合

        现有两个服务器A、B,当A与B直接关联时,A、B中就会有部分相同的代码耦合度较高,后续修改代码也会非常不方便,但引入阻塞队列后,A与阻塞队列直接关联,B与阻塞队列直接关联,这样既可以使A与B能进行联系,又能减少两个的重合代码。虽然多出了操作阻塞队列的代码,但这部分代码是大致不变的,这样后续想要修改A或B的代码就相对简单许多。

2、削峰填谷

        上游服务器,尤其是入口服务器,干的活更少,单个请求消耗的资源更少;

        下游服务器承担了更重的任务量,单个请求消耗的资源更多;

        当上游服务器的请求在短时间内快速增加,若两服务器直接关联,就会导致B在短时间内需要请求大量的资源,严重的会导致服务器崩溃;

        若引入阻塞队列,使上游服务器与阻塞队列直接关联,下游服务器与阻塞队列直接关联,这样当上游的请求激增时,就会将请求存放在阻塞队列中,使得下游服务器的工作量不会在短时间内增加过多,减缓了下游服务器的压力。

六、代价

        1、引入阻塞队列后,整体的结构会更复杂,管理起来更复杂;

        2、程序运行的效率会有影响,原本是两对象相互交流,引入阻塞队列后,就是二者分别与阻塞队列交流,使得代码的运行效率会降低。


http://www.kler.cn/news/366785.html

相关文章:

  • 博客搭建之路:hexo增加搜索功能
  • UDP(用户数据报协议)端口监控
  • Prism 四事件聚合器
  • java项目之基于web的智慧社区设计与实现(springboot)
  • JS 中 reduce()方法及使用
  • 985研一,转嵌入式好还是后端开发好?
  • SQL SERVER 2005/2008/2012/2016/2020 数据库状态为“可疑”的解决方法(亲测可用)
  • LeetCode - #127 单词接龙
  • 在 MySQL 中,添加索引后,插入、更新和删除操作的性能通常会变慢的原因
  • 2.插入排序(斗地主起牌)
  • 强化学习数学原理学习(一)
  • golang开发alertmanagerWebhook,实现prometheus+alertmanagerWebhook告警
  • 1.Linux按键驱动
  • AI绘画开源王者归来,Stable Diffusion 3.5 AI绘画模型开源发布
  • 矩阵的可解性:关于Ax=b的研究
  • WeakHashMap详解
  • 谷粒商城の订单服务分布式事务
  • 京准电钟:NTP网络授时服务器应用航管自控系统
  • jmeter学习(6)逻辑控制器
  • 【Python】Whoosh:全流程自建搜索引擎
  • 【c++篇】:从基础到实践--c++内存管理技巧与模版编程基础
  • 免费的CMS系统有哪些?
  • windows中的tracert命令
  • Apache Paimon介绍
  • IIS下FTP服务器的PASV端口范围修改方法
  • SQL 干货 | SQL 反连接