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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jlq 中级黑马   /  2015-11-2 23:26  /  634 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

//生成消费问题:多线程同时操作
public class ProducerConsumerDemo {

    public static void main(String[] args) {
         Resource r= new Resource();
         Producer pro= new Producer(r);
         Consumer con= new Consumer(r);
         Thread t1= new Thread(pro);
         Thread t2= new Thread(con);
         
         Thread t3= new Thread(pro);
         Thread t4= new Thread(con);
         
         t1.start();
         t2.start();
         t3.start();
         t4.start();
    }

}
class Resource{
    private String name;
    private int count =1;
    private boolean flag =false;
   
    public synchronized void set(String name){
          while(flag )
             //--t1 --t3
             try{wait();}catch (Exception e){}
          this.name =name+"--" +count ++;
        System. out.println(Thread.currentThread().getName()+ ".生产者."+this .name );
          flag= true;
          this.notifyAll();
    }
    public synchronized void out(){
          while(!flag )
             //--t2 --t4
             try{wait();}catch (Exception e){}//this可以省略
        System. out.println(Thread.currentThread().getName()+ ".消费者...." +this.name);
          flag= false;
          this.notifyAll();     
    }
}
class Producer implements Runnable{
    private Resource res;
    Producer(Resource res){
          this.res =res;
    }
    public void run(){
          while(true ){
             res.set( "商品+");
         }        
    }
}
class Consumer implements Runnable{
    private Resource res;
    Consumer(Resource res){
          this.res =res;
    }
    public void run(){
          while(true ){
             res.out();
         }        
    }
}

7 个回复

倒序浏览
很不错,多点注释就更好了
回复 使用道具 举报
操作系统经典问题,牛
回复 使用道具 举报
一楼 +1
回复 使用道具 举报
有点意思
回复 使用道具 举报
我也搞不懂,我学的头晕脑胀的
回复 使用道具 举报
加油!加油!加油!加油!加油!加油!加油!加油!加油!加油!
回复 使用道具 举报
zzwzz 中级黑马 2015-11-4 00:12:04
8#
详解。。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马