4.1.7ReentrantLock实现生产者消费者模式(1对1)

来源:互联网 发布:如何做好淘宝详情页 编辑:程序博客网 时间:2024/06/10 23:01

package demo;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;/** * Created by sunyifeng on 17/10/18. */public class MyService {    private ReentrantLock lock = new ReentrantLock();    private Condition condition = lock.newCondition();    private boolean flag = false;    public void set(){        try {            lock.lock();            while (flag == true) {                condition.await();            }            System.out.println("------");            flag = true;            condition.signal();        } catch (InterruptedException e) {            e.printStackTrace();        } finally {            lock.unlock();        }    }    public void get(){        try {            lock.lock();            while (flag == false) {                condition.await();            }            System.out.println("++++++");            flag = false;            condition.signal();        } catch (InterruptedException e) {            e.printStackTrace();        }finally {            lock.unlock();        }    }}
package demo;/** * Created by sunyifeng on 17/10/18. */public class ThreadA extends Thread {    private MyService myService;    public ThreadA(MyService myService) {        super();        this.myService = myService;    }    @Override    public void run() {        super.run();        for (int i = 0; i < Integer.MAX_VALUE; i++) {            myService.set();        }    }}
package demo;/** * Created by sunyifeng on 17/10/18. */public class ThreadB extends Thread {    private MyService myService;    public ThreadB(MyService myService) {        super();        this.myService = myService;    }    @Override    public void run() {        super.run();        for (int i = 0; i < Integer.MAX_VALUE; i++) {            myService.get();        }    }}
package demo;/** * Created by sunyifeng on 17/10/18. */public class Run {    public static void main(String[] args) {        MyService myService = new MyService();        ThreadA threadA = new ThreadA(myService);        threadA.start();        ThreadB threadB = new ThreadB(myService);        threadB.start();    }}
运行结果:

。。。。。。

------
++++++
------
++++++
------
++++++
------

程序分析:

无。

原创粉丝点击