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 }

运行代码👇

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM