Java_多线程下的生产者与消费者实现

来源:互联网 发布:工厂仿真软件 编辑:程序博客网 时间:2024/05/16 16:16
import java.util.*;import java.text.*;import static java.lang.System.*;import static java.lang.Math.*;import java.util.concurrent.locks.*;class  ProducerConsumerDemo2{public static void main(String[] args) {//System.out.println("Hello World!");Resourse r=new Resourse();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();}}class Resourse{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)condition_con.await();System.out.println(Thread.currentThread().getName()+"消费者---"+this.name);flag=false;condition_pro.signal();}finally{lock.unlock();}}}class  Producer implements Runnable{private Resourse res;Producer(Resourse res){this.res=res;}public void run(){while(true){try{res.set("商品");}catch (InterruptedException e){}}}}class Consumer implements Runnable{private Resourse res;Consumer(Resourse res){this.res=res;}public void run(){while(true){try{res.out();}catch (InterruptedException e){}}}}

0 0
原创粉丝点击