JAVA 多线程实现包子铺(买包子,吃包子)
1 package baozi; 2 3 /* 4 生产者(包子铺)类:是一个 线程类,继承Thread 5 设置线程任务(run):生产包子 6 对包子 进行判断 7 true:有包子 8 包子铺调用wait方法进入等待状态 9 false : 没有包子 10 包子铺生产包子 11 交替生产两种包子 12 有两种状态(i%2==0) 13 包子铺生产两种包子 14 修改包子的状态为true有 15 唤醒吃货线程,让吃货线程吃包子 16 17 注意: 18 包子铺线程和包子线程关系-->通信(互斥) 19 锁对象必须保证唯一,可以使用包子对象作为锁对象 20 包子铺类和吃货的类 就需要把保安资质对象作为参数传递进来 21 1,需要在成员位子创建一个包子变量 22 2,使用带参数构造方法。为这个包子变量赋值 23 24 */ 25 public class BaoZIPu extends Thread { 26 private BaoZi bz; 27 28 public BaoZIPu(BaoZi bz){ 29 this.bz=bz; 30 } 31 32 @Override 33 public void run() { 34 int count = 0; 35 while (true) { 36 //同步技术 37 synchronized (bz) { 38 //判断有没有包子 39 if (bz.flag == true) { 40 //包子铺调用wait反法进入等待状态 41 try { 42 bz.wait(); 43 } catch (InterruptedException e) { 44 e.printStackTrace(); 45 } 46 } 47 //被唤醒之后执行,包子铺生产包子 48 //生产两种包子 49 if (count % 2 == 0) { 50 bz.pi = "薄皮"; 51 bz.xian = "猪肉"; 52 } else { 53 bz.pi = "厚皮"; 54 bz.xian = "牛肉"; 55 } 56 count++; 57 System.out.println("包子铺正在生产" + bz.pi + bz.xian + "的包子"); 58 try { 59 Thread.sleep(1000); 60 } catch (InterruptedException e) { 61 e.printStackTrace(); 62 } 63 //包子铺生产好了包子 64 //修改包子的状态为true 65 bz.flag = true; 66 //唤醒吃货线程,让吃货线程吃包子 67 bz.notify(); 68 System.out.println("包子铺已经生产好了" + bz.pi + bz.xian + "的包子,吃货可以开始吃了"); 69 } 70 } 71 } 72 }
1 package baozi; 2 3 /* 4 设置包子的属性 5 皮 6 馅 7 包子的状态:有 true 没有 false 8 */ 9 public class BaoZi { 10 String pi; 11 String xian ; 12 //包子的状态 有 true 没有 fasle 13 boolean flag =false; 14 }
1 package baozi; 2 3 import baozi.BaoZi; 4 5 public class ChiHuo extends Thread { 6 private BaoZi bz; 7 public ChiHuo(BaoZi bz){ 8 this.bz=bz; 9 } 10 @Override 11 public void run() { 12 while(true){ 13 synchronized (bz){ 14 if (bz.flag==false){ 15 try { 16 bz.wait(); 17 } catch (InterruptedException e) { 18 e.printStackTrace(); 19 } 20 } 21 //被唤醒后执行的代码 ,吃包子 22 System.out.println("吃货正在吃"+bz.pi+bz.xian+"的包子"); 23 bz.flag=false; 24 bz.notify(); 25 System.out.println("吃货已经把"+bz.pi+bz.xian+"的包子出完了,包子铺开始生产包子 "); 26 System.out.println("++++++++++++++"); 27 } 28 } 29 } 30 }
1 package baozi; 2 3 import baozi.BaoZIPu; 4 import baozi.BaoZi; 5 import baozi.ChiHuo; 6 7 public class Main { 8 public static void main(String[] args) { 9 BaoZi bz = new BaoZi(); 10 //创建包子铺线程,开始生产包子 11 new BaoZIPu(bz).start(); 12 //创建吃货线程,开启,吃包子 13 new ChiHuo(bz).start(); 14 } 15 16 }
运行代码?
转载于:https://www.cnblogs.com/Ssinoo/p/11018948.html
JAVA 多线程实现包子铺(买包子,吃包子)相关推荐
- Java多线程同步问题(和尚吃馒头问题)
创建一个和尚类 public class Basket {private int count = 100 ;//和尚数量 ==没吃馒头的和尚数量private int numMonks = 30 ;p ...
- 12行代码AC——试题 算法训练 猴子吃包子——解题报告
励志用尽量少的代码做高效的表达. 注意点: 挨个算吃包子的时间势必会因为省略小数的问题导致结果不准确. 因此,对于本题:我的核心思路是:分数代替小数,使用除法+取余的方式化简分数,进而解题. 代码: ...
- 试题5 算法训练 猴子吃包子
问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉包,y1个韭菜包,z1个没有 ...
- python多线程异步 简单小栗子(包子大战)
#coding:utf-8 import threading import timedef producer():print u'tantianran: 等人来买包子...'event.wait() ...
- JAVA多线程作业-多人买票
JAVA多线程作业 作业要求: 1. 假设现在有一个售票员进行售票,票价为5元,初始状态:票数不限,票售员手中有1张10元钱: 2. 每来一个顾客买票,相当于是创建一个线程,注意,此时顾客共享的资源是 ...
- 蓝桥杯试题 算法训练 猴子吃包子C语言
问题描述 从前,有一只吃包子很厉害的猴子,它可以吃无数个包子,但是,它吃不同的包子速度也不同:肉包每秒钟吃x个:韭菜包每秒钟吃y个:没有馅的包子每秒钟吃z个:现在有x1个肉包,y1个韭菜包,z1个没有 ...
- 给我十分钟带你过完java多线程所有基础知识
目录: 1.并发并行与线程进程 2.认识CPU和主线程 3.多线程的三种创建方式 4.三种创建多线程方式的进一步探究和对比 5.匿名内部类的多线程创建 6.多线程内存的分析 7.深度了解线程run() ...
- 【26天高效学习Java编程】Day19:60 多个实例讲解,彻底搞懂Java 多线程 【可查阅,可复习,可面试】
本专栏将从基础开始,循序渐进,由浅入深讲解Java的基本使用,希望大家都能够从中有所收获,也请大家多多支持. 专栏地址:26天高效学习Java编程 相关软件地址:软件地址 所有代码地址:代码地址 如果 ...
- java多线程之——生产者和消费者(详解及提高)
目录 前情引入 简单介绍 预备知识 代码及详解 简单代码 基本解释 生产者线程类 消费者线程类 测试类 执行流程 控制台输出 自我提高 问题一 问题二 升级代码 总结 前情引入 做一些简单的认识和告知 ...
最新文章
- 做出的C++选择以及背后的原因
- 多路 IO 转接 :select 函数
- python使用tkinter做界面之颜色
- 基于SAML2.0的SAP云产品Identity Authentication过程介绍
- python画图指定起点_python3绘图示例6-1(基于matplotlib,绘图流程介绍及设置等)...
- 数据科学入门与实战:玩转pandas实战项目分析航班晚点情况
- python全栈学习--day13(迭代器,生成器)
- linux 关于数据库的部分命令
- 猎豹网校 java_猎豹网校Java 零基础入门 JAVA基础视频教程(精制)
- java毕业生设计药品管理系统演示录像2021计算机源码+系统+mysql+调试部署+lw
- 服务器正在运行由于另一个程序,关于 服务器正在运行中,由于另一个程序正在运行中,此操作没法完成 问题的解决...
- 快递柜模拟程序【感知与控制】
- 计算机国培目标与计划,2018国培个人研修计划
- adobe bridge cs6怎么卸载_安装adobe ps cs6时,一起的Adobe Bridge CS6 (64 Bit)是什么东西?装了需不需要卸载?...
- MT【118】利用线面角最小解题
- 你瞧不起的低代码开发,阿里云总裁张建锋,他看上了
- android系统更新原理简介
- 解决报错: You have not concluded your merge (MERGE_HEAD exists)
- Zephyr UART
- Rocket核心流程源码分析
热门文章
- c实现面向对象编程(3)
- android GridView item中组件获取焦点
- 一项横断面人群研究中比较放射学阴性的中轴脊柱关节炎患者与强制性脊柱炎患者之间的差别...
- 【技术贴】火狐的悬停激活标签扩展插件下载。Tab Focus
- 无线网中的一些技术名词和解释
- 学金融买计算机配置,我是学金融投资的计算机等级考试哪个方向对我工作有用...
- 小程序 reduce_使用Reduce制作的10个JavaScript实用程序功能
- 入职体检体检错了_我们如何更新入职体验并获得更多用户
- 国开计算机组成原理,国开计算机组成原理.docx
- 连接服务器_命令行连接FTP服务器