【多线程】多线程交互+生产者消费者案例
【多线程】多线程交互生产者消费者案例1wait、notify、notifyAll2生产者消费者问题1wait、notify、notifyAllwait方法和notify方法并不是Thread线程上的方法它们是Object上的方法所有的Object都可以被用来作为同步对象。wait()的意思是 让占用了这个同步对象的线程临时释放当前的占用并且等待。 所以调用wait是有前提条件的一定是在synchronized块里否则就会出错。notify() 的意思是通知一个等待在这个同步对象上的线程你可以苏醒过来了有机会重新占用当前对象了。notifyAll() 的意思是通知所有的等待在这个同步对象上的线程你们可以苏醒过来了有机会重新占用当前对象了。2生产者消费者问题1-使用栈来存放数据并且把栈改造为支持线程安全。当栈内的数据为0的时候访问pull方法的线程就会等待不为0的时候所有访问pull方法的线程都会被唤醒。当栈内的数据满的时候访问push方法的线程就会等待当不是满的时候所有访问push方法的线程都会被唤醒。2-提供一个生产者线程类生产随机大写字符压入栈堆3-提供一个消费者线程类从栈堆中弹出字符并打印4-提供一个测试类使两个生产者和三个消费者线程同时运行publicclassMyStackT{LinkedListTvaluesnewLinkedListT();//自定义方法内嵌栈的方法等于把栈的方法addLast改造成线程安全方法push//如过栈满了就通知线程等待没满就唤醒线程继续存放publicsynchronizedvoidpush(Tt){while(values.size()200){try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}this.notifyAll();values.addLast(t);}//自定义方法内嵌栈的方法等于把栈的方法removeLast改造成线程安全方法pull//如果栈空了就通知线程等待有值了就唤醒线程继续获取publicsynchronizedTpull(){while(values.isEmpty()){try{this.wait();}catch(InterruptedExceptione){e.printStackTrace();}}this.notifyAll();returnvalues.removeLast();}publicTpeek(){returnvalues.getLast();}}publicclassProducerThreadextendsThread{privateMyStackCharacterstack;publicProducerThread(MyStackCharacterstack,Stringname){super(name);this.stackstack;}Overridepublicvoidrun(){while(true){charcrandomChar();System.out.println(this.getName() 压入c);stack.push(c);try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}}}publiccharrandomChar(){return(char)(Math.random()*(Z1-A)A);}}publicclassConsumerThreadextendsThread{privateMyStackCharacterstack;publicConsumerThread(MyStackCharacterstack,Stringname){super(name);this.stackstack;}Overridepublicvoidrun(){while(true){charcstack.pull();System.out.println(this.getName() 弹出c);stack.push(c);try{Thread.sleep(100);}catch(InterruptedExceptione){e.printStackTrace();}}}}publicclassTestThreadProductConsume{publicstaticvoidmain(String[]args){MyStackCharacterstacknewMyStack();for(inti0;i5;i){newProducerThread(stack,生产者i).start();}for(inti0;i5;i){newConsumerThread(stack,消费者i).start();}}}

相关新闻

abap通过PI平台实现rest json的接收

abap通过PI平台实现rest json的接收

之前做系统集成都是用soap协议,由于大部分人没有接触过soap,所以学习了po端开发rest接口,方便对接,实现记录如下: ESB配置后台正常做配置 IB配置 接口配置 通道配置在erp系统上的sproxy激活,写个测试代码 使…

2026/7/22 15:40:58 阅读更多 →
abap通过PI平台实现rest json的发送

abap通过PI平台实现rest json的发送

之前做系统集成都是用soap协议,由于大部分人没有接触过soap,所以学习了po端开发rest接口,方便对接,实现记录如下: ESB配置后台正常做配置 IB配置 接口配置通道配置 然后服务端接口的开发发现接收返回数据会有大小写自动…

2026/7/22 15:40:58 阅读更多 →
【限时解密】头部金融/医疗/法律机构内部AI质量红线标准(附12项强制校验SOP清单)

【限时解密】头部金融/医疗/法律机构内部AI质量红线标准(附12项强制校验SOP清单)

更多请点击: https://kaifayun.com 第一章:【限时解密】头部金融/医疗/法律机构内部AI质量红线标准(附12项强制校验SOP清单) 头部金融机构、三甲医院与省级以上司法机关在部署AI系统时,普遍执行高于国标GB/T 40643—2…

2026/7/22 15:40:58 阅读更多 →

最新新闻

选重庆多媒体会议音响工程制造商要看哪些标准?

选重庆多媒体会议音响工程制造商要看哪些标准?

咱们在选择重庆多媒体会议音响工程制造商时,核心原则是根据通用标准去评估各个制造商是否能满足需求,全文仅提供选型方法,不会做具体的产品推荐。通用选型标准产品与品牌资源: 制造商应具备丰富的产品选择,既要有自有品…

2026/7/22 16:24:35 阅读更多 →
TI DSP中断复用配置实战:从原理到代码的嵌入式系统优化指南

TI DSP中断复用配置实战:从原理到代码的嵌入式系统优化指南

1. 中断复用:嵌入式系统性能优化的基石 在嵌入式系统开发,尤其是基于TI DSP这类高性能处理器的项目中,中断管理是决定系统实时性、稳定性和效率的核心环节。想象一下,一个复杂的工业控制系统,需要同时处理来自多个传感…

2026/7/22 16:24:35 阅读更多 →
P1049 [NOIP 2001 普及组] 装箱问题

P1049 [NOIP 2001 普及组] 装箱问题

记录157 #include<bits/stdc.h> using namespace std; int n,v,a[35]; int min_remain2e410;// 记录最小剩余空间&#xff0c;初始化为一个比V大的数 void dfs(int remain_v,int num){// remain_v: 当前剩余体积, num: 当前考虑到了第几个物品if(num>n){ // 1. 终止…

2026/7/22 16:24:35 阅读更多 →
P1071 [NOIP 2009 提高组] 潜伏者

P1071 [NOIP 2009 提高组] 潜伏者

记录156 #include<bits/stdc.h> using namespace std;int main() {// 优化IO速度ios::sync_with_stdio(false);cin.tie(0);string s1,s2,s3;cin>>s1>>s2>>s3;// 1. 定义两个 map// decode_map[密文字符] 明文字符map<char,char> decode_map; /…

2026/7/22 16:24:35 阅读更多 →
鸿蒙 ArkTS 实战:Taxi Fare Estimator 从打车费用估算到出行费用应用完整解析

鸿蒙 ArkTS 实战:Taxi Fare Estimator 从打车费用估算到出行费用应用完整解析

鸿蒙 ArkTS 实战&#xff1a;Taxi Fare Estimator 从打车费用估算到出行费用应用完整解析 前言 打车费用估算 是一个典型的鸿蒙 ArkTS 轻量工具页面。它围绕“根据车型、里程和等待时间估算打车费用&#xff0c;支持快车、专车和豪华三种计价模型。”这个明确需求&#xff0c…

2026/7/22 16:24:35 阅读更多 →
TI PRCM时钟源选择:从寄存器配置到系统级时钟管理实战

TI PRCM时钟源选择:从寄存器配置到系统级时钟管理实战

1. 项目概述&#xff1a;从寄存器手册到系统级时钟设计如果你和我一样&#xff0c;常年泡在嵌入式底层开发里&#xff0c;那对TI&#xff08;德州仪器&#xff09;的PRCM模块一定不陌生。手册里那些密密麻麻的寄存器位域描述&#xff0c;像MPU_CLKSRC、VIDEO_PLL_CLKSRC&#x…

2026/7/22 16:23:34 阅读更多 →

日新闻

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

TI DSP系统配置模块SYSCFG详解:中断机制与主设备优先级配置实战

1. 项目概述与SYSCFG模块的核心价值在嵌入式系统&#xff0c;尤其是像TI C6000系列这样的高性能DSP开发中&#xff0c;我们常常会与芯片手册里那些密密麻麻的寄存器打交道。很多开发者可能更关注算法实现、内存优化或者外设驱动&#xff0c;但对于一个稳定、高效的系统而言&…

2026/7/22 0:00:26 阅读更多 →
微信Server酱:高到达率的应急通知方案实践

微信Server酱:高到达率的应急通知方案实践

1. 为什么我们需要"最次"的通知方案&#xff1f; 在数字化协作环境中&#xff0c;消息通知系统的重要性不言而喻明。但现实情况是&#xff0c;企业级通知方案往往需要复杂的API对接&#xff08;如企业微信、钉钉、飞书&#xff09;&#xff0c;个人开发者的小项目又经…

2026/7/22 0:00:26 阅读更多 →
甲方要的“简洁“PPT,到底是简洁还是省事?

甲方要的“简洁“PPT,到底是简洁还是省事?

甲方说"简洁一点"&#xff0c;乙方听到的是"少做几页"。甲方说"不要太复杂"&#xff0c;乙方理解成"别放图表了"。结果交过去&#xff0c;甲方说"我说的简洁不是这个意思"。"简洁"这个词在PPT语境里&#xff0c;是…

2026/7/22 0:00:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中&#xff0c;我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源&#xff0c;还是配置文件、证书等&#xff0c;都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下&#xff0c;但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP&#xff08;轻量级目录访问协议&#xff09;作为企业级身份认证的黄金标准&#xff0c;已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时&#xff0c;发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/21 5:34:47 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”&#xff0c;而是以可解释、可审计、可迭代的方式&#xff0c;赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻