12,多线程-生产者消费者问题
1,生产一个,消费多个(生产多个,消费一个):对notify()的线程没有判断:将if换成while
2,全部等待:notify换成notifyAll
package songyan; class Resource { private String name; private int count=1; boolean flag=false; public synchronized void set(String name) { while(this.flag) try{this.wait();}catch(Exception e){} this.flag=true; this.name=name+"--"+count++; System.out.println(Thread.currentThread().getName()+"生产者"+this.name+"------"); this.notifyAll(); } public synchronized void out() { while(!this.flag) try{this.wait();}catch(Exception e){} System.out.println(Thread.currentThread().getName()+"消费者"+this.name); this.flag=false; this.notifyAll(); } } class Produce implements Runnable { private Resource res; Produce(Resource res ) { this.res=res; } public void run() { while(true) { res.set("+商品+"); } } } class consume implements Runnable { private Resource res; consume(Resource res ) { this.res=res; } public void run() { while(true) { res.out(); } } } public class test{ public static void main(String[] args) { Resource res = new Resource(); Produce pro = new Produce(res) ; consume con = new consume(res); 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(); } }