多生产者和多消费者

来源:互联网 发布:汽车保养提醒软件 编辑:程序博客网 时间:2024/05/02 04:37
public class Test{public static void main(String[] args){Basket b = new Basket(5);Producer p1 = new Producer(b);Consumer s1 = new Consumer(b);new Thread(p1,"生产者1").start();new Thread(s1,"消费者1").start();new Thread(p1,"生产者2").start();new Thread(s1,"消费者2").start();new Thread(p1,"生产者3").start();new Thread(s1,"消费者3").start();new Thread(s1,"消费者4").start();}}class Apple{int id;Apple(int id){this.id = id;}}class Basket{Apple[] valume;int index = 0;Basket(int val){valume = new Apple[val];}synchronized  void put(Apple a){while(index == valume.length){try{this.wait();}catch (InterruptedException e){e.printStackTrace();}}this.notifyAll();valume[index]= a;index ++;}synchronized  Apple get(){while(index == 0){try{this.wait();}catch (InterruptedException e){e.printStackTrace();}}this.notifyAll();index --;return valume[index];}}class Producer implements Runnable{Basket b;Apple a;int count = 0;boolean flag = true;Producer(Basket b){this.b = b;}public void run(){while(flag){if(count == 100){return;}synchronized (this){count++;System.out.println(Thread.currentThread().getName() + ":++++++++" + "put a apple,count = "+ count);}b.put(new Apple(0));try{Thread.sleep(1000);}catch (InterruptedException e){e.printStackTrace();}}}}class Consumer implements Runnable{Basket b;Apple a;String lock = new String("lock");int count = 0;boolean flag = true;Consumer(Basket b){this.b = b;}public void run(){while(flag){if(count == 100){return;}synchronized(lock){count++;System.out.println(Thread.currentThread().getName() + ":"+"get a apple,outcount = "+ count);}a = b.get();try{Thread.sleep(500);}catch (InterruptedException e){e.printStackTrace();}}}}

0 0