阻塞队列,生产者消费者模型
目标:
1. 认识与使用阻塞队列
2. 认识与实现消费者模型
目录
阻塞队列的特点
生产者消费者模型
生产者消费者模型的优点
阻塞队列实现该模型
阻塞队列的特点
1. 线程安全
2. 带有阻塞特性
(1)如果队列为空,继续出队列,就会发生阻塞。直到其他线程往队列里添加元素
(2)如果队列为满,继续入队列,就会发生阻塞。直到其他线程从队列里取走元素
java库的阻塞队列
1. BlockingDeque为抽象类,不能直接new,java库中提供了 数组 和 链表的方式实现
2. 阻塞队列继承与Queue,要是想实现阻塞特性使用 put() 和 take() 方法
生产者消费者模型
以包饺子为例子,流程一般为:和面,擀饺子皮,包饺子。我擀饺子皮,另外的人负责包饺子消耗饺子。这种工作模式就是生产者-消费者模型。
但是我生产的饺子皮放到哪呢?一般是放到 盖帘 上(就相当于阻塞队列)。我擀饺子皮慢的话,另外的人就得等着我擀好,再包饺子。(从空的队列中获取元素时阻塞);我擀饺子皮快的话, 盖帘上 满了 ,我就得等待(往满的队列里添加元素也会堵塞)。
生产者消费者模型的优点
1. 解耦合
两个模块,联系越紧密,耦合就越高。
比如实现一个简单的分布式系统:
客户端向A(服务器)发送请求,但是这个请求也得从A传到B,B再返回给A才能返回响应到客 户,这下A和B有着高耦合(B出现问题可能对A会有影响)。
相比之下,使用生产者消费者模型,在A和B之间封装一个阻塞队列,让A传给这个阻塞队列, 再传给B,这下就降低了A与B的耦合(B出现问题对A没有影响)。
2. 削峰填谷
峰:短时间内请求量多的
谷:短时间内请求量比较少
以上一个为例子,如果客户端传给A的数据比较多,则B也就会有很多数据。(可能会出现问 题:B不能直接承受这么多的数据)
先比之下, 使用生产者消费者模型,在A和B之间封装一个阻塞队列,让A传给这个阻塞队列,
再传给B,在B所能承受的范围内,多余的先存放到队列中,这下B就不会挂了。
阻塞队列实现该模型
在这里生产者和消费者我们使用两个线程来表示。
1. 生产者生产的慢,消费的快
public class Tset {public static void main(String[] args) {BlockingDeque<String> queue = new LinkedBlockingDeque<>(1000);//生产者Thread t1 = new Thread(() -> {int num = 1;while (true) {try {queue.put(num + "");System.out.println("生产元素:" + num++);Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}}});//消费者Thread t2 = new Thread(() -> {while (true) {try {String result = queue.take();System.out.println("消费元素" + result);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t2.start();}
}
2. 生产者生产的快,消费的慢
public class Tset {public static void main(String[] args) {BlockingDeque<String> queue = new LinkedBlockingDeque<>(1000);//生产者Thread t1 = new Thread(() -> {int num = 1;while (true) {try {queue.put(num + "");System.out.println("生产元素:" + num++);} catch (InterruptedException e) {throw new RuntimeException(e);}}});//消费者Thread t2 = new Thread(() -> {while (true) {try {String result = queue.take();System.out.println("消费元素" + result);Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}}});t1.start();t2.start();}
}
相关文章:
阻塞队列,生产者消费者模型
目标: 1. 认识与使用阻塞队列 2. 认识与实现消费者模型 目录 阻塞队列的特点 生产者消费者模型 生产者消费者模型的优点 阻塞队列实现该模型 阻塞队列的特点 1. 线程安全 2. 带有阻塞特性 (1)如果队列为空,继续出队列&a…...
【RCRL充放电时间相关计算】
一. 基础知识 L、C元件称为“惯性元件”,即电感中的电流、电容器两端的电压,都有一定的“电惯性”,不能突然变化。充放电时间,不光与L、C的容量有关,还与充/放电电路中的电阻R有关。RC电路的时间常数:τRC…...
C++ primer plus--输入、输出和文件
17 输入、输出和文件 17.1 C 输入和输出概述 C 把输入和输出看做字节流。输入时,程序从输入流中抽取字节;输出时,程序将字节插到输出流中。 缓冲区是内存中的临时存储区域,是程序与文件或其他 I/O 设备之间的桥梁。 17.2 使用…...
案例题--Web应用考点
案例题--Web应用考点 负载均衡技术微服务XML和JSON无状态和有状态真题 在选择题中没有考察过web的相关知识,主要就是在案例分析题中考察 负载均衡技术 应用层负载均衡技术 传输层负载均衡技术 就近的找到距离最近的服务器,并进行分发 使用户就近获取…...
MySQL的SQL 优化:提升数据库性能
1. 插入操作优化 1.1 使用多值插入 通常情况下,插入大量数据时,使用多值插入语句比逐行插入更高效。例如,将多个数据行打包成一个 INSERT 语句: INSERT INTO users (name, email) VALUES (Alice, aliceexample.com), (Bob, bob…...
【匠心打造】从0打造uniapp 可视化拖拽设计 c_o 第十篇
一、click one for uniapp置顶: 全部免费开源 (你商业用途也没关系,不过可以告诉我公司名或者项目名,放在官网上好看点。哈哈-_-) 二、写在之前 距离上一篇更新已经大约4个月了,公司的事情,自己的一些琐事一直没时间…...
BIT-5-操作符详解(C语言初阶学习)
1. 各种操作符的介绍。 2. 表达式求值 1. 操作符分类: 算术操作符 移位操作符 位操作符 赋值操作符 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2. 算术操作符 - * / % 除了 % 操作符…...
【重拾C语言】三、分支程序设计(双分支和单分支程序设计、逻辑判断、多分支程序设计、枚举类型表示;典型例题:判断闰年和求一元二次方程根)
目录 前言 三、分支程序设计 3.1 判断成绩是否及格——双分支程序设计 3.2 成绩加上获奖信息—单分支程序设计 3.3 逻辑判断——布尔类型 3.4 获奖分等级——多分支程序设计 3.5 表示汽车种类——枚举类型 3.6 例题 3.6.1 例题——判断某个年份是否闰年 3.6.2 例题—…...
Shiro应用到Web Application
一、权限基础 a) 认证(你是谁?) 判断你(被认证者)是谁的过程。通常被认证者提供用户名和密码。 常见的认证包含如下几种: 匿名认证:允许访问资源,不做任何类型的安全检查。表单认证:访问资源之前,需要提…...
【POST请求-腾讯翻译君-爬虫案例】
原因:尝试多个在线翻译平台,由于返回数据存在加密原因(暂时不会解密),最总找到 ”腾讯翻译君“ 完成爬虫案例POST请求测试 案例测试网址 腾讯翻译 :https://fanyi.qq.com/ import requests import jsoncla…...
多卡片效果悬停效果
效果展示 页面结构 从页面的结构上看,在默认状态下毛玻璃卡片是有层次感的效果叠加在一起,并且鼠标悬停在卡片区域后,卡片整齐排列。 CSS3 知识点 transform 属性的 rotate 值运用content 属性的 attr 值运用 实现页面整体布局 <div …...
首饰饰品经营商城小程序的作用是什么
首饰如耳钉、戒指、手镯等除了高价值产品外,还有很多低价产品,市场需求客户众多,在实际经营中,商家们也会面临一些痛点。 私域话题越来越多加之线上线下同行竞争、流量匮乏等,更对商家选择自建商城经营平台。 通过【…...
华为OD机试真题【服务器能耗统计】
1、题目描述 【服务器能耗统计】 服务器有三种运行状态:空载、单任务、多任务,每个时间片的能耗的分别为1、3、4; 每个任务由起始时间片和结束时间片定义运行时间; 如果一个时间片只有一个任务需要执行,则服务器处于单任务状志; 如果一个时间片有多个任务需要执行,则服务器处于…...
ubuntu按下del却出现空格(命令行下键盘错乱)
问题: 有一天远程我的ubuntu 20.04,发现为何按 del 会产生空格后移的效果,up键也会重叠显示,首先感觉是这个远程软件有问题,于是又换了xshell,发现还是不行,只能打开积灰已久的笔记本࿰…...
Go开始:Go基本元素介绍
目录 标识符与关键字Go中的标识符Go关键字关键字示例 具名的函数常规函数代码示例 方法代码示例 高阶函数代码示例 匿名函数与Lambda表达式代码示例 闭包代码示例 具名的值变量基本数据类型复合数据类型指针类型 常量基本常量类型枚举常量常量表达式 定义类型和类型别名类型定义…...
十二、【漏洞复现】Rails任意文件读取(CVE-2019-5418)
十二、【漏洞复现】Rails任意文件读取(CVE-2019-5418) 12.1、漏洞原理 Ruby on Rails是一个使用 Ruby 语言写的开源 Web 应用框架,它是严格按照 MVC 结构开发的。它努力使自身保持简单,来使实际的应用开发时的代码更少,使用最少…...
【计算机视觉|人脸建模】学习从4D扫描中获取的面部形状和表情的模型
本系列博文为深度学习/计算机视觉论文笔记,转载请注明出处 标题:Learning a model of facial shape and expression from 4D scans 链接:Learning a model of facial shape and expression from 4D scans | ACM Transactions on Graphics Pe…...
【ADB】蓝牙总结
ADB 打开蓝牙关闭蓝牙打开Setting查看蓝牙地址查看蓝牙名称查看蓝牙是否开启车机蓝牙Setting配置路径wifi 打开蓝牙 adb root adb shell svc bluetooth enable 关闭蓝牙 adb root adb shell bluetooth disable 打开Setting adb shell am start -n com.android.settings/.S…...
嵌入式系统设计与应用---ARM处理器体系结构(学习笔记)
ARM处理器概述 Cortex-A8处理器工作模式 ps:除用户模式以外的其他模式被称为非用户模式或特权模式;除用户模式及系统模式以外的其他模式可称为异常模式 Cortex-A8存储器管理 ARM的基本数据类型 字节(Byte)&#…...
计算机竞赛 身份证识别系统 - 图像识别 深度学习
文章目录 0 前言1 实现方法1.1 原理1.1.1 字符定位1.1.2 字符识别1.1.3 深度学习算法介绍1.1.4 模型选择 2 算法流程3 部分关键代码 4 效果展示5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 毕业设计 图像识别 深度学习 身份证识别…...
StarRocks数据导入
1、相关环境 Flink作为当前流行的流式计算框架,在对接StarRocks时,若直接使用JDBC的方式"流式"写入数据,对StarRocks是不友好的,StarRocks作为一款MVCC的数据库,其导入的核心思想还是"攒微批降频率&qu…...
JavaSE | 初识Java(一) | JDK \ JRE \ JVM
Java初识 Java 是一门半编译型、半解释型语言。先通过 javac 编译程序把源文件进行编译,编译后生成的 .class 文件是由字节 码组成的平台无关、面向 JVM 的文件。最后启动 java 虚拟机 来运行 .class 文件,此时 JVM 会将字节码转换成平台能够理…...
6轮面试阿里Android开发offer,薪资却从21k降到17k,在逗我?
一小伙工作快3年了,拿到了阿里云Android开发岗位P6的offer,算HR面一起,加起来有6轮面试了,将近3个月的时间,1轮同级 1轮Android用人部门leader 1轮Android 组leader 1轮项目CTO 1轮HR 1轮HRBP。 一路上各种事件分…...
基于混合蛙跳优化的BP神经网络(分类应用) - 附代码
基于混合蛙跳优化的BP神经网络(分类应用) - 附代码 文章目录 基于混合蛙跳优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.混合蛙跳优化BP神经网络3.1 BP神经网络参数设置3.2 混合蛙跳算法应用 4.测试结果…...
[架构之路-230]:计算机硬件与体系结构 - 可靠性、可用性、稳定性;MTTF、MTTR、MTBF
目录 一、软件质量属性 二、可靠性、可用性、稳定性区别 2.1 比较 2.2 公式比较 2.3 "正常工作时间"和"正常运行时间" 2.4 比较案例 2.5 可用性好但可靠性较差的示例 三、MTTF、MTTR、MTBF 3.1 图示 3.2 定义 (1)MTTF&am…...
selenium自动化测试环境安装教程
0X00前言: Selenium是一个广泛应用于Web应用程序测试的工具。它提供了一组功能强大的API,用于模拟用户与Web浏览器的交互。以下是对Selenium的简要介绍: 功能:Selenium能够自动化执行各种Web浏览器上的操作,如点击、输…...
如何修改springboot项目启动时的默认图标?
如下所示为springboot项目启动时的默认图标,我们可以把它换成我们自己喜欢的图片 方法如下: 第一步:我们需要将图片放置当前项目的resources目录下 如下所示为我自定义的一张照片 第二步: 方法1:在application.properties文件中…...
基于阴阳对优化的BP神经网络(分类应用) - 附代码
基于阴阳对优化的BP神经网络(分类应用) - 附代码 文章目录 基于阴阳对优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.阴阳对优化BP神经网络3.1 BP神经网络参数设置3.2 阴阳对算法应用 4.测试结果&#x…...
Spring bean定义Spring Bean 的作用域
Spring bean定义 目录 Spring bean定义 Spring配置元数据 Spring Bean 的作用域 singleton作用域: 原型作用域: 示例: 形成应用程序的骨干是由Spring IoC容器所管理的对象称为bean。bean被实例化,组装,并通过Sprin…...
代码随想录 动态规划 part16
583. 两个字符串的删除操作 给定两个单词 word1 和 word2 ,返回使得 word1 和 word2 相同所需的最小步数。 每步 可以删除任意一个字符串中的一个字符。 思路:dp[i][j]数组表示使得 word1[:i] 和 word2[:j] 相同所需的最小步数。当word1[i-1]word2[…...
个人适合做什么网站/微信管理工具
一、使用TableLogic来进行逻辑删除 Data NoArgsConstructor AllArgsConstructor //TableName("t_user") public class User {TableId(value "ids",type IdType.AUTO)private Long id;//指定属性与表字段名对应TableField(value "t_name")pri…...
网站怎么做落款/图片识别搜索引擎
遇到的问题:mysql消耗完内存。show full process list;mysql进程locked了.修改步骤:1. 改配置 2. 导出sql3. 重启数据库4. 导入sql将表修改成innodb:my.cnf 添加:innodb_file_per_tableinnodb_log_group_home_dir /usr/local/my…...
如何优化一个网站/公司网络推广方案
一、目的 jenkins上将war包,部署到远程服务器的tomcat上。 这边tomcat在windows 主机A上,版本apache-tomcat-8.5.23。 jenkins在主机B上,centos系统。 A、B之间网络连通。 二、步骤 1、安装插件 重启jenkins后。此时,打开job&…...
做网站的公司哪好/品牌网站建设解决方案
1.假如我们有如下页面 <input type"text" name"textname" id"text_id" value""> <!--其余的请自行添加.重要的是要有jquery取得text,areatext,radio,checkbox,select的值,以及其他一些操作; 1.假如我们有如下页面 <inp…...
地方网站类型/推广活动策划方案范文
一、23设计模式 二、五大设计原则 1.开闭原则(OCP)含义:一个软件实体应当对扩展开放,对修改关闭。 2.单一职责原则(SRP)含义:就是对一个类而言,应该仅有一个引起变化的原因。所以在构…...
做玄幻封面素材网站/太原seo排名
API低代码开发平台是指一种能够帮助企业快速交付业务应用的平台,实现了企业的降本增效目标,同时也实现了企业快速开发,快速交付的目标。 随着计算机技术的飞速发展和计算机网络的大面积普及,企业信息化建设逐步深入,企…...