本帖最后由 uoyouwy 于 2014-10-21 21:35 编辑  
 
昨天在练习多线程通讯的时候出现下面问题,求解释,代码如下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); 
        t1.start(); 
        t2.start(); 
         
        } 
 
} 
 
class Resource{ 
        private String name; 
        private int  count=1; 
        private boolean flag=false; 
        public  synchronized void set(String name){ 
                //while(flag) 
                 //如果用IF只会判断等着 
                if(flag)    
                        try {wait();}catch(Exception e){} 
                this.name=name+"--"+count++; 
                System.out.println(Thread.currentThread().getName()+"----生产者---"+this.name); 
                flag=true;  //将对方唤醒 
                this.notify();         
                //this.notifyAll(); 
        } 
        public  synchronized void Out(){ 
                if(!flag) 
                //while (!flag) 
                        try {wait();}catch(Exception e){} 
                System.out.println(Thread.currentThread().getName()+"----消*费*者---"+this.name); 
                flag=false; //将对方唤醒。 
                this.notify();         
                //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(); 
                         } 
                         
                } 
        } 
 
 |   
        
 
    
    
    
    
 
 
 |