ReentrantLock方式实现生产者-消费者模式

来源:互联网 发布:磐石 网络投票 价格 编辑:程序博客网 时间:2024/06/05 06:00

生产者与消费者类:

public class MyService {    private ReentrantLock lock = new ReentrantLock();    private Condition condition = lock.newCondition();    private boolean hasValue = false;    public void set(){        try {            lock.lock();            while (hasValue == true){                condition.await();            }            System.out.println("________");            hasValue = true;            condition.signal();        }catch (InterruptedException e){            e.printStackTrace();        }    }    public void get(){        try{            lock.lock();            while (hasValue == false){                condition.await();            }            System.out.println("+++++++");            hasValue = false;            condition.signal();        }catch (InterruptedException e){            e.printStackTrace();        }    }}

生产者线程:

public class MyThreadA extends Thread{    private MyService myService;    public MyThreadA(MyService myService){        super();        this.myService = myService;    }    @Override    public void run(){        for (int i = 0 ; i < Integer.MAX_VALUE ; i++){            myService.set();        }    }}

消费者线程:

public class MyThreadA extends Thread{    private MyService myService;    public MyThreadA(MyService myService){        super();        this.myService = myService;    }    @Override    public void run(){        for (int i = 0 ; i < Integer.MAX_VALUE ; i++){            myService.set();        }    }}

启动类:

public class Run {    public static void main(String[] args) {        MyService myService = new MyService();        MyThreadA a = new MyThreadA(myService);        a.start();        MyThreadB b = new MyThreadB(myService);        b.start();    }}

运行结果:

+++++++________+++++++________+++++++________+++++++________+++++++________+++++++________
0 0
原创粉丝点击