/* 多线程编程 生产者和消费者 */ class Res { private int count=0; private String name; private boolean flag = false; public synchronized void set(String name) { while(flag) 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) try{this.wait();}catch(Exception e){} System.out.println(Thread.currentThread().getName() + "--消费者----" + this.name); flag = false; this.notifyAll();//唤醒所有的等待线程 } } class Producer implements Runnable { Res r = new Res(); Producer(Res r) { this.r = r; } public void run() { while(true) r.set("商品"); } } class Consumer implements Runnable { Res r = new Res(); Consumer(Res r) { this.r = r; } public void run() { while(true) r.out(); } } class TestDemo { public static void main(String []args) { Res r = new Res(); Producer p = new Producer(r); Consumer c = new Consumer(r); Thread t1 = new Thread(p); Thread t2 = new Thread(c); Thread t3 = new Thread(p); Thread t4 = new Thread(c); t1.start(); t2.start(); t3.start(); t4.start(); } }
![](https://img-my.csdn.net/uploads/201303/11/1362996351_8736.jpg)