A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马-小龙 中级黑马   /  2013-1-27 23:49  /  1247 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-29 12:14 编辑
  1. package cn.itcast.string;

  2. public class ProducerAndConsumer {

  3.         /**
  4.          * 演示生产者与消费者例子
  5.          * @param args
  6.          */
  7.         public static void main(String[] args) {
  8.                 BreadBar bb = new BreadBar();//创建包子柜台对象
  9.         
  10.                 Chef chef = new Chef(bb);
  11.                
  12.                 Consumer cs = new Consumer(bb);

  13.                 chef.start();
  14.                 cs.start();
  15.         }

  16. }

  17. //这里是包子柜台类
  18. class BreadBar{
  19.         private int count ;//定义一个私有的包子数量属性
  20.         
  21.         //设置包子数量的getCount()方法
  22.         public void setCount(int count){
  23.                 this.count = count;
  24.         }
  25.         //获取包子数的方法
  26.         public int getCount(){
  27.                 return count;
  28.         }
  29.         
  30.         //定义一个吃包子的的eat()方法
  31.         public void eat(){
  32.                 System.out.println("正在吃包子。。。。");
  33.                 count -= count;
  34.         }
  35.         
  36.         //定义一个做包子的make()方法
  37.         public void make(){
  38.                 System.out.println("师傅,给我做几笼包子!!!!");
  39.                 count += count;
  40.         }
  41. }
  42. //厨师类
  43. class Chef extends Thread{
  44.         private BreadBar breadBar;//定义一个包子柜台的属性
  45.         
  46.         public Chef(BreadBar bb) {
  47.                 // TODO Auto-generated constructor stub
  48.         }

  49.         //重写线程类的run()方法
  50.         public void run(){
  51.                 synchronized(breadBar){
  52.                         while(true) {//死循环:while(true)。只要没包子就做,不怕累死;
  53.                                 if(breadBar.getCount() < 0){
  54.                                         breadBar.make();
  55.                                         this.notify();
  56.                                 }
  57.                                 else{
  58.                                         try {
  59.                                                 this.wait();
  60.                                         } catch (InterruptedException e) {
  61.                                                 // TODO Auto-generated catch block
  62.                                                 e.printStackTrace();
  63.                                         }
  64.                                 }                                       
  65.                         }
  66.                 }
  67.         }        
  68. }

  69. //顾客类
  70. class Consumer extends Thread{
  71.         private BreadBar breadBar;//定义一个包子柜台的属性
  72.         
  73.         public Consumer(BreadBar bb) {
  74.                 // TODO Auto-generated constructor stub
  75.         }

  76.         //重写线程类的run()方法
  77.         public void run(){
  78.                 synchronized(breadBar){
  79.                         while(true) {//死循环:while(true)。只要没包子就做,不怕累死;
  80.                                 if(breadBar.getCount() > 0){
  81.                                                 breadBar.eat();
  82.                                 }
  83.                                 else{
  84.                                         try {
  85.                                                 this.wait();
  86.                                         } catch (InterruptedException e) {
  87.                                                 // TODO Auto-generated catch block
  88.                                                 e.printStackTrace();
  89.                                         }
  90.                                         this.notify();
  91.                                 }                                       
  92.                         }
  93.                 }
  94.         }        
  95. }
复制代码
写了一个小时,麻烦大神帮我看看啊 !!!!

评分

参与人数 1黑马币 +6 收起 理由
Rancho_Gump + 6

查看全部评分

1 个回复

倒序浏览
[code]public class ProducerAndConsumer {

                /**
                 * 演示生产者与消费者例子
                 * @param args
                 */
                public static void main(String[] args) {
                        BreadBar bb = new BreadBar();//创建包子柜台对象
                
                        Chef chef = new Chef(bb);
                        
                        Consumer cs = new Consumer(bb);

                        new Thread(chef).start();
                        new Thread(cs).start();
                        
                }

        }

        //这里是包子柜台类
        class BreadBar{
                private  static int count = 0 ;//定义一个私有的包子数量属性
                
                
                //定义一个吃包子的的eat()方法
                public synchronized void eat(){
                                    if(count<0)  
                                    try{wait();}catch(Exception e){}
                        
                                    System.out.println("正在吃包子。。。。");
                                count --;
                                if(count<0)
                                notify();
                           
                        
                }
                
                //定义一个做包子的make()方法
                public synchronized void make(){
                                        if(count > 0)
                                        try{wait();}catch(Exception e){}
                       
                                System.out.println("师傅,给我做几笼包子!!!!");
                                count ++;
                                if(count >=1)
                                notify();
                               
                }
        }
        //厨师类
        class Chef implements Runnable {
                private BreadBar breadBar;//定义一个包子柜台的属性
                
                public Chef(BreadBar bb) {
                        // TODO Auto-generated constructor stub
                        breadBar = bb;
                }

                //重写线程类的run()方法
                public void run(){
                        while(true){
                        breadBar.make();
                        }
                }        
        }

        //顾客类
        class Consumer implements Runnable{
                private BreadBar breadBar;//定义一个包子柜台的属性
                
                public Consumer(BreadBar bb) {
                        // TODO Auto-generated constructor stub
                        breadBar = bb;
                }

                //重写线程类的run()方法
                public void run(){
                        while(true){
                        breadBar.eat();
                        }
                }        
        }

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马