本帖最后由 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();
}
}
}
|
|