多线程:管程法
管程法
- 生产者把生产好的数据放入缓冲区,消费者从缓冲区拿出数据
package jingcheng.test.gaoji;
//测试生产者消费者模型-->利用缓冲区解决:管程法
//生产者,消费者,产品,缓冲区
public class TestPc {public static void main(String[] args) {SynContainer container = new SynContainer();new Productor(container).start();new Consumer(container).start();}
}
//生产者
class Productor extends Thread{SynContainer container;public Productor(SynContainer container){this.container = container;}//生产@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("生产了"+i+"只鸡");container.push(new Chicken(i));}}
}
//消费者
class Consumer extends Thread{SynContainer container;public Consumer(SynContainer container){this.container=container;}//消费@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("消费了-->"+container.pop().id+"只鸡");}}
}
//产品
class Chicken{int id;//产品编号public Chicken(int id) {this.id = id;}
}
//缓冲区
class SynContainer{//需要一个容器大小Chicken[] chickens = new Chicken[10];//容器计数器int count = 0;//生产者放入产品public synchronized void push(Chicken chicken){//如果容器满了就要等待消费者消费if(count == chickens.length){try {this.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}//通知消费者消费,生产者等待}//如果没满,就要丢入产品chickens[count]=chicken;count++;//可以通知消费者消费了this.notifyAll();}//消费者消费产品public synchronized Chicken pop(){//判断能否消费if(count == 0){try {this.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}//等待生产者生产,消费者等待}//如果可以消费count--;Chicken chicken = chickens[count];//吃完了,通知生产者生产this.notifyAll();return chicken;}}
生产了0只鸡
生产了1只鸡
生产了2只鸡
生产了3只鸡
生产了4只鸡
生产了5只鸡
生产了6只鸡
生产了7只鸡
生产了8只鸡
生产了9只鸡
生产了10只鸡
生产了11只鸡
消费了–>9只鸡
消费了–>10只鸡
消费了–>8只鸡
消费了–>7只鸡
消费了–>6只鸡
消费了–>5只鸡
消费了–>4只鸡
消费了–>3只鸡
消费了–>2只鸡
生产了12只鸡
生产了13只鸡
生产了14只鸡
生产了15只鸡
生产了16只鸡
生产了17只鸡
生产了18只鸡
生产了19只鸡
生产了20只鸡
消费了–>15只鸡
消费了–>19只鸡
消费了–>18只鸡
消费了–>17只鸡
消费了–>16只鸡
消费了–>14只鸡
消费了–>13只鸡
消费了–>20只鸡
消费了–>12只鸡
消费了–>11只鸡
消费了–>1只鸡
消费了–>0只鸡
生产了21只鸡
生产了22只鸡
生产了23只鸡
生产了24只鸡
生产了25只鸡
生产了26只鸡
生产了27只鸡
生产了28只鸡
生产了29只鸡
生产了30只鸡
生产了31只鸡
消费了–>30只鸡
消费了–>29只鸡
消费了–>28只鸡
消费了–>27只鸡
消费了–>26只鸡
消费了–>31只鸡
消费了–>25只鸡
消费了–>24只鸡
消费了–>23只鸡
消费了–>22只鸡
消费了–>21只鸡
生产了32只鸡
生产了33只鸡
生产了34只鸡
生产了35只鸡
生产了36只鸡
生产了37只鸡
生产了38只鸡
生产了39只鸡
生产了40只鸡
生产了41只鸡
生产了42只鸡
消费了–>41只鸡
消费了–>40只鸡
消费了–>39只鸡
生产了43只鸡
生产了44只鸡
生产了45只鸡
生产了46只鸡
消费了–>42只鸡
消费了–>45只鸡
消费了–>44只鸡
消费了–>43只鸡
消费了–>38只鸡
消费了–>37只鸡
消费了–>46只鸡
消费了–>36只鸡
消费了–>35只鸡
消费了–>34只鸡
消费了–>33只鸡
消费了–>32只鸡
生产了47只鸡
生产了48只鸡
生产了49只鸡
生产了50只鸡
生产了51只鸡
生产了52只鸡
生产了53只鸡
生产了54只鸡
生产了55只鸡
生产了56只鸡
生产了57只鸡
消费了–>56只鸡
消费了–>55只鸡
消费了–>54只鸡
消费了–>57只鸡
消费了–>53只鸡
消费了–>52只鸡
消费了–>51只鸡
消费了–>50只鸡
消费了–>49只鸡
消费了–>48只鸡
消费了–>47只鸡
生产了58只鸡
生产了59只鸡
生产了60只鸡
生产了61只鸡
生产了62只鸡
生产了63只鸡
生产了64只鸡
生产了65只鸡
生产了66只鸡
生产了67只鸡
生产了68只鸡
生产了69只鸡
消费了–>67只鸡
消费了–>68只鸡
消费了–>66只鸡
消费了–>65只鸡
消费了–>64只鸡
消费了–>63只鸡
生产了70只鸡
生产了71只鸡
生产了72只鸡
生产了73只鸡
生产了74只鸡
生产了75只鸡
消费了–>69只鸡
消费了–>74只鸡
消费了–>75只鸡
消费了–>73只鸡
消费了–>72只鸡
消费了–>71只鸡
消费了–>70只鸡
消费了–>62只鸡
消费了–>61只鸡
消费了–>60只鸡
消费了–>59只鸡
消费了–>58只鸡
生产了76只鸡
生产了77只鸡
生产了78只鸡
生产了79只鸡
生产了80只鸡
生产了81只鸡
生产了82只鸡
生产了83只鸡
生产了84只鸡
生产了85只鸡
生产了86只鸡
消费了–>85只鸡
消费了–>84只鸡
消费了–>83只鸡
消费了–>82只鸡
消费了–>81只鸡
消费了–>80只鸡
消费了–>79只鸡
消费了–>78只鸡
消费了–>77只鸡
消费了–>76只鸡
生产了87只鸡
生产了88只鸡
生产了89只鸡
生产了90只鸡
生产了91只鸡
生产了92只鸡
生产了93只鸡
生产了94只鸡
生产了95只鸡
生产了96只鸡
生产了97只鸡
消费了–>92只鸡
消费了–>96只鸡
消费了–>95只鸡
消费了–>94只鸡
消费了–>93只鸡
消费了–>91只鸡
消费了–>90只鸡
消费了–>97只鸡
消费了–>89只鸡
消费了–>88只鸡
消费了–>87只鸡
消费了–>86只鸡
生产了98只鸡
生产了99只鸡
消费了–>99只鸡
消费了–>98只鸡
相关文章:
多线程:管程法
管程法 生产者把生产好的数据放入缓冲区,消费者从缓冲区拿出数据 package jingcheng.test.gaoji; //测试生产者消费者模型-->利用缓冲区解决:管程法 //生产者,消费者,产品,缓冲区 public class TestPc {public st…...
7.1 String StringBuffer 和 StringBuilder 的区别是什么? String 为什么是不可变的?
可变性 简单的来说:String 类中使用 final 关键字修饰字符数组来保存字符串,private final char value[],所以String 对象是不可变的。 补充(来自issue 675):在 Java 9 之后,String 、StringBu…...
【C++STL标准库】容器适配器
功能:将功能类似,但是接口不符合的接口转换成另一个接口 stack 栈stack(栈) 特点:先入后出,只能从栈顶弹出值,只能从栈顶压入值 也就是说栈需要的功能:push_back、pop_back 所以可…...
2023深圳杯(东三省)数学建模ABC题思路及代码
大家好呀,比赛开赛后我一直在去写各个题,深圳杯的难度还是比较大的,在这里给大家带来初步的选题建议及思路。 本次深圳杯小白推荐选择A题,数据分析类题目无论怎样都能完成论文,内容也会比较丰富。学过嵌入信息的可以选…...
Set集合类详解(附加思维导图)
目录 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 2.2、TreeSet集合的使用 三、HashSet、LinkedHashSet、TreeSet的使用场景 四、list和set集合的区别 一、Set集合思维导图 二、set集合类常用方法 2.1、HashSet集合常用方法 ①:add…...
【vue3】vue3接收props以及emit的用法
技术:vue3.2.40 UI框架:arco-design 2.44.7 css技术:less 4.1.3 实现:子组件接收props以及通过emit方法传值父组件 vue3使用的组合式API,我这里使用的是defineComponent 1.父页面调用子组件 <template><d…...
【Lua学习笔记】Lua入门
文章目录 Lua变量数据类型变量声明其他表示 Lua语法判断逻辑判断(Lua很特殊,这个比较重要)短路判断 ifif else 循环whileforrepeat 迭代器泛型for迭代器无状态迭代器多状态的迭代器 Lua函数select方法 数组字符索引_G (不是教程&a…...
LLM Data Pipelines: 解析大语言模型训练数据集处理的复杂流程
编者按:在训练大语言模型的过程中,构建高质量的训练数据集是非常关键的一步,但关于构建大模型训练所需数据集的通用数据处理流程(Data pipelines)的相关资料极为稀少。 本文主要介绍了基于Common Crawl数据集的数据处理流程。首先,文章概述了…...
如何使用postman判断返回结果是否正确
针对一个接口,我们在知道参数以及参数对应的结果时,可以通过postman进行判断,验证返回数据是否与预期数据相等。这样可以使我们的接口测试更加的方便简洁。 1、准备数据。 postman可以接受的文件格式如图所示,一般来说可以将我们…...
A General framework for Prompt
你已经知道了 Prompt 可以具有一些通用的结构,比如一个简单的Prompt 结构: 能否帮我为我的课程 TAI自动化,设计一套数字营销策略? Action 我们的目标是激发目标受众一一那些希望利用人工智能简化工作流的人们的兴趣,并提高课程的知名度。 G…...
使用python将PDF转word
实现功能,将程序所在当前路径下的所有PDF文件转化为word import os from pdf2docx import Converter# 获取当前路径 current_path os.getcwd()# 遍历当前路径下的所有文件和文件夹 for file_name in os.listdir(current_path):# 检查文件是否为 PDF 文件if file_n…...
CMU 15-445 -- Logging Schemes - 17
CMU 15-445 -- Logging Schemes - 17 引言IndexFailure ClassificationTransaction FailuresSystem FailuresStorage Media Failures Buffer Pool PoliciesShadow Paging: No-Steal ForceWrite-Ahead Log (WAL): Steal No-ForceLogging SchemesCheckpoints小结 引言 本系列为…...
逻辑回归分析实战(根据鸢尾花的性质预测鸢尾花类别)
紧接着上过一个线性回归模型(一元线性回归模型实战) 一元线性回归模型和逻辑回归模型是统计学中常见的两种回归模型,它们有以下几点不同之处: 1. 目标变量类型:一元线性回归模型适用于连续型目标变量,即预测…...
【每日一题】2050. 并行课程 III
【每日一题】2050. 并行课程 III 2050. 并行课程 III题目描述解题思路 2050. 并行课程 III 题目描述 给你一个整数 n ,表示有 n 节课,课程编号从 1 到 n 。同时给你一个二维整数数组 relations ,其中 relations[j] [prevCoursej, nextCour…...
【kubernetes系列】kubernetes之使用kubeadm搭建高可用集群
概述 目前来说,kubernetes集群搭建的方式很多,选择一个稳定的适合自己的很重要。目前使用kubeadm方式搭建k8s集群还是很常见的,使用kubeadm搭建可以很简单差不多两条命令就行,也可以稍微复杂一点做一些基础优化,本文将…...
SpringBoot 快速实现 IP 地址解析
在spring boot 项目中获取请求的ip与详细地址,很多网站app 中都已经新增了ip 地址显示,大家也可以用在自己的开发中,显得更高级。 引入 如果使用本地ip 解析的话,我们将会借助ip2region,该项目维护了一份较为详细的本…...
【云原生】Docker镜像的创建,Dockerfile
一、Docker镜像的创建 创建镜像有三种方法,分别为【基于已有镜像创建】、【基于本地模板创建】以及【基于Dockerfile创建】。 1.基于现有镜像创建 (1)首先启动一个镜像,在容器里做修改docker run -it --name web centos:7 /bin/…...
了解Unity编辑器之组件篇Event(七)
Event:用于在对象之间进行通信和交互的机制。它可以帮助你实现触发和响应特定动作或状态的逻辑一、Event System:用于处理 UI 事件的系统组件 First Selected 属性:定义了在场景加载或 UI 激活时,哪个 UI 元素将成为首选的选中元素…...
bash: 睡觉的冒号;是不是两个点?
文章目录 简介躺着的冒号是两个点正常冒号总结简介 在bash里冒号和躺着的冒号的用法不一样一定要注意别用错。 躺着的冒号是两个点 难道正常的不是两个点)的作用: A sequence expression takes the form {x…y[…incr]}, where x and y are either integers or single cha…...
揭秘爱数AnyShare认知助手:大模型深度产品化,深化人与机器的“分工协作”
文 | 智能相对论 作者 | 叶远风 大模型竞逐日趋白热化,百模大战热闹非凡。 但是,对产业主体或者普通看客而言,大模型究竟如何改变一线业务、实现工作方式的变革甚至组织转型,很多人并没有具象化的认知。 技术厉害、产品牛&…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
