/* //生产者,消费者问题(多个生产者、消费者) class Resource { private String name; private int count=1; private boolean flag=false; public synchronized void set(String name) { while(flag) //由if换成while try{wait();}catch(Exception e){} this.name=name+"----"+count++; System.out.println(Thread.currentThread().getName()+"----生产者----"+this.name); flag=true; this.notifyAll(); //由notify换成notifyAll } public synchronized void out() { while(!flag) //由if换成while try{wait();}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"----消费者---------"+this.name); flag=false; this.notifyAll();//由notify换成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(); } } class Test { 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(pro); Thread t3=new Thread(con); Thread t4=new Thread(con); t1.start(); t2.start(); t3.start(); t4.start(); } } */ /* //jdk1.5中提供了多线程升级解决方案 //将同步synchronized替换成现实Lock操作 //将Object中的wait,notify,notifyAll替换成Condition对象 //该示例中,实现了本方只唤醒对方操作 import java.util.concurrent.locks.*; class Resource { private String name; private int count=1; private boolean flag=false; private Lock lock=new ReentrantLock(); private Condition condition_pro=lock.newCondition();/// private Condition condition_con=lock.newCondition(); public void set(String name)throws InterruptedException { lock.lock(); try { while(flag) condition_pro.await();/// this.name=name+"----"+count++; System.out.println(Thread.currentThread().getName()+"----生产者----"+this.name); flag=true; condition_con.signal(); } finally { lock.unlock();/// } } public void out() throws InterruptedException { lock.lock();/// try { while(!flag) //由if换成while condition_con.await();// System.out.println(Thread.currentThread().getName()+"----消费者---------"+this.name); flag=false; condition_pro.signal(); } finally { lock.unlock(); } } } class Producer implements Runnable { private Resource res; Producer(Resource res) { this.res=res; } public void run() { while(true) try { res.set("+商品+"); } catch (Exception e) { } } } class Consumer implements Runnable { private Resource res; Consumer(Resource res) { this.res=res; } public void run() { while(true) try { res.out(); } catch (Exception e) { } } } class Test { 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(pro); Thread t3=new Thread(con); Thread t4=new Thread(con); t1.start(); t2.start(); t3.start(); t4.start(); } } */