//生成消费问题:多线程同时操作 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(); } } } |