码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA 多线程实现包子铺(买包子,吃包子)

时间:2019-06-13 20:35:50      阅读:180      评论:0      收藏:0      [点我收藏+]

标签:thread   一个   col   cep   技术   调用   size   包子   png   

 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 }

运行代码??

技术图片

 

JAVA 多线程实现包子铺(买包子,吃包子)

标签:thread   一个   col   cep   技术   调用   size   包子   png   

原文地址:https://www.cnblogs.com/Ssinoo/p/11018948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!