java中的多生产者-消费者问题学习

来源:互联网 发布:小米盒子视频软件 编辑:程序博客网 时间:2024/06/05 12:47
import java.io.*;import java.util.Scanner;import java.util.concurrent.locks.*;class Resource{private String name;private int count=1;private boolean flag=false;Lock lock =new ReentrantLock();Condition producer_con=lock.newCondition();Condition consumer_con=lock.newCondition();Condition con =lock.newCondition();public void set(String name){lock.lock();try{while(flag)//try{lock.wait();}catch(InterruptedException e){}try{producer_con.await();}catch(InterruptedException e){}this.name=name+count;count++;System.out.println(Thread.currentThread().getName()+"....生产者..."+this.name);flag=true;consumer_con.signal();}finally{lock.unlock();}}public void out(){lock.lock();try{while(!flag)try{consumer_con.await();}catch(InterruptedException e){}System.out.println(Thread.currentThread().getName()+this.name);flag=false;producer_con.signal();}finally{lock.unlock();}}}class Consumer implements Runnable{private Resource r;Consumer(Resource r){this.r = r;}public void run(){while(true){r.out();}}}class Producer implements Runnable{private Resource r;Producer(Resource r){this.r=r;}public void run(){while(true){r.set("烤鸭");}}}class Main{public static void main(String args[]){Resource r=new Resource();Producer pro=new Producer(r);Consumer con=new Consumer(r);Thread t0=new Thread(pro);Thread t1=new Thread(pro);Thread t2=new Thread(con);Thread t3=new Thread(con);t0.start();t1.start();t2.start();t3.start();}}


0 0