新闻详情

新闻详情

首页 / 资讯中心 / 详情

Java程序—生产消费模型

发布时间:2026/9/28 20:08:58来源:尧图网络
Java程序—生产消费模型
模型生产者往仓库里放产品消费者从仓库里取产品仓库一个共享的缓冲区矛盾点两边速度不同仓库空了消费者不能空手而归只能等仓库满了生产者不能再硬塞也只能等wait() 和 notify()wait()让当前线程进入等待状态挂起同时释放手里的锁。注意它不能自己醒过来必须等别人叫。notify()唤醒在同一个对象上等待的某个线程让它重新参与抢锁。核心口诀synchronized(…) 里锁的是谁wait() / notify() 前面就写谁。 三处必须是同一个对象。代码实现packagecom.dy.producer_consumer0926;//生产消费模型importjava.util.List;//wait():执行该方法的线程会进入等待状态进入该状态后不能主动恢复到运行状态//直到另一个线程利用同一个对象调用notify()方法才能唤醒该线程publicclassProducerimplementsRunnable{//仓库publicListIntegerlist;publicintMax20;//仓库的最大值publicProducer(ListIntegerlist){this.listlist;}publicvoidrun(){while(true){//同步代码块在线程安全的状态执行//监视器对象必须和调用wait方法的对象保存一致synchronized(this){//判断仓库容量if(list.size()Max){//生产一个数据list.add(1);//唤醒消费者System.out.println(生产者生产了一个产品当前库存:list.size());this.notify();}else{//当线程进入等待状态挂起try{this.wait();}catch(InterruptedExceptione){thrownewRuntimeException(e);}System.out.println(仓库已经,生产者进入等待状态...);}}}}}packagecom.dy.producer_consumer0926;importjava.util.List;publicclassConsumerimplementsRunnable{//仓库publicListIntegerlist;publicConsumer(ListIntegerlist){this.listlist;}publicvoidrun(){while(true){synchronized(this){//判断仓库有没有产品if(list.size()0){//消费一个数据list.remove(list.size()-1);System.out.println(消费者消费了一个产品当前库存为:list.size());//唤醒生产者this.notify();}else{//仓库空了当前线程进入等待状态try{this.wait();}catch(InterruptedExceptione){thrownewRuntimeException(e);}}}}}}packagecom.dy.producer_consumer0926;importjava.util.ArrayList;importjava.util.List;//测试类:创建一个共享仓库交给生产者和消费者同时使用publicclassTest{publicstaticvoidmain(String[]args){//仓库对象ListIntegerlistnewArrayList();ProducerproducernewProducer(list);ConsumerconsumernewConsumer(list);newThread(producer).start();newThread(consumer).start();}}
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

MikroORM 7 索引与唯一约束完全指南:从基础装饰器到高级数据库特性 2026/9/28 20:52:16

MikroORM 7 索引与唯一约束完全指南:从基础装饰器到高级数据库特性

后端 【免费下载链接】mikro-orm TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, MariaDB, MS SQL Server, PostgreSQL and SQLite/libSQL databases. 项目地址: https://gitcode.com/gh_mir…

阅读更多 →
FluentRead 翻译模型目录核对报告:轻量档默认策略、厂商编号证据边界与配置迁移实践(2026-09-12) 2026/9/28 20:52:15

FluentRead 翻译模型目录核对报告:轻量档默认策略、厂商编号证据边界与配置迁移实践(2026-09-12)

前端AI 应用本地部署 【免费下载链接】FluentRead An open-source browser extension for bilingual translation. 一款开源的浏览器双语翻译插件。 项目地址: https://gitcode.com/gh_mirrors/fl/FluentRead 点击查看 免费下载 FluentRead 是一款开源的双语翻译浏…

阅读更多 →
十一.Linux——mybash 2026/9/28 20:52:15

十一.Linux——mybash

今天,我们要完成一件非常有意思有锻炼意义的事——实现一个mybash()程序bash():接收你输入的命令,调用程序执行,返回结果这就是bash程序实现的结果实现mybash:思路:forkexec实现复制子进程,替换…

阅读更多 →
Mnemosyne源码深度剖析:一个SQLite数据库里36张表的记忆设计解剖 2026/9/28 20:52:14

Mnemosyne源码深度剖析:一个SQLite数据库里36张表的记忆设计解剖

Mnemosyne源码深度剖析:一个SQLite数据库里36张表的记忆设计解剖 【免费下载链接】mnemosyne Zero-cloud AI memory that works everywhere. SQLite-backed. One pure-Python dependency. 项目地址: https://gitcode.com/gh_mirrors/mnemosyne5/mnemosyne 如…

阅读更多 →
OpenClaw 配 TaoToken:虾壳云一键部署 Windows 图文实操与 settings.json 骨架 2026/9/28 20:52:13

OpenClaw 配 TaoToken:虾壳云一键部署 Windows 图文实操与 settings.json 骨架

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
C++深度学习部署实战:从模型训练到生产级推理 2026/9/28 20:52:06

C++深度学习部署实战:从模型训练到生产级推理

这个系列前面十篇,我们把深度学习的理论、CNN结构、训练技巧这些基础都过了一遍。从这一篇开始,我想把视角切换到工程落地:用 C 来做深度学习部署。为什么是这个时间点?因为大多数人的起点是 Python,训练调参很方便&am…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉