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

package prouderComsumer;
//多线程间通信问题               <生产烤鸭问题>
/*在多线程通信问题中   生产这prouder  和消费者comsumer   与资源 resource  之间的关系
* 我们先说说resource  他是一个志愿 里面有属性  和生成方法  与消费方法。
* prouder  & comsumer  中首先由resource的构造函数和  实现runnable的run方法并且是无线循环的。*/
//主函数:
public class ProuderComsumerDemo {
                        public static void main(String[] args) {
                                //创建资源对象 。
                                Resource r = new Resource();
                                Prouder p  = new Prouder(r);//创建任务
                                Consmer c  = new Consmer(r);//创建任务
                                Thread t1  =new Thread(p);
                                Thread t2  =new Thread(c);//创建线程
                                  t1.start();
                                  t2.start();
                               
       
   }
}

// 资源 resource
class Resource {
           //属性
           private String name;//烤鸭名字
           private  int count = 1;//烤鸭编号
           private  boolean falg= false;//生产与消费装换
           // 生产(prouder)方法, 消费方法 consmer  方法。
           public synchronized void set(String name){ //生产完了才能消费
                               while(falg){try {//刚开始生产不用等带
                                    this.wait();} catch (InterruptedException e) {e.printStackTrace();}}
                            while(true){
                                     this.name = name+count;
                                     count++;
                                     System.out.println(Thread.currentThread().getName()+"生产烤鸭"+this.name);
                                     falg = true;
                                     notifyAll();
                            }
           }
           public synchronized void out(){
                        while(!falg)
                        {try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}
                       
                             System.out.println(Thread.currentThread().getName()+"消费烤鸭"+this.name);
                             
                             falg = false;
                             
                             notifyAll();
                             
           }
          
}
//生产者
class Prouder implements Runnable{
         //  构造方法 和复写 run方法  
              Resource r;

        public Prouder(Resource r) {
       
                this.r = r;
        }
              @Override
            public void run() {
                    while(true){
                            r.set("烤鸭");
                    }
                   
            }
       
}
//消费者
class Consmer implements Runnable{
               Resource r;

                public Consmer(Resource r) {
                       
                        this.r = r;
                }
               
            public void run() {

              while(true){
                      r.out();
              }
            
            }
}//
运行结果:Thread-0生产烤鸭烤鸭114414
Thread-0生产烤鸭烤鸭114415
Thread-0生产烤鸭烤鸭114416
Thread-0生产烤鸭烤鸭114417
Thread-0生产烤鸭烤鸭114418
Thread-0生产烤鸭烤鸭114419
Thread-0生产烤鸭烤鸭114420
Thread-0生产烤鸭烤鸭114421
Thread-0生产烤鸭烤鸭114422
Thread-0生产烤鸭烤鸭114423
Thread-0生产烤鸭烤鸭114424
Thread-0生产烤鸭烤鸭114425
Thread-0生产烤鸭烤鸭114426
Thread-0生产烤鸭烤鸭114427
Thread-0生产烤鸭烤鸭114428
Thread-0生产烤鸭烤鸭114429
Thread-0生产烤鸭烤鸭114430
Thread-0生产烤鸭烤鸭114431
Thread-0生产烤鸭烤鸭114432   后面的数组怎么回事

您需要登录后才可以回帖 登录 | 加入黑马