java多线程--ReentrantLock实现生产者与消费者模式
来源:互联网 发布:stc80c52数据手册 编辑:程序博客网 时间:2024/05/16 06:31
一.本例实现 :一对一交替打印,
一.生产者逻辑 :每次只允许一个生产者来进行生产操作(生产者之间互斥访问仓库),必须等消费者取走数据之后,才能进行下一次的生产
二.消费者逻辑 :每次只允许一个消费者来进行生产操作(消费者之间互斥访问仓库),必须等生产者生产数据之后,才能进行下一次的消费。
二.仓库类:
package lock.produce.comsumer;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.ReentrantLock;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){condition.await();}System.out.println("打印*");hasValue = true;//只允许当前一个线程进来,且是消费线程进来condition.signal();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{lock.unlock();}}/** * 消费数据 */public void get(){try {lock.lock(); //获取监视器对象,即获取锁while(!hasValue){condition.await();}System.out.println("打印&");hasValue = false;//只允许当前一个线程进来,且是生产者线程进来condition.signal();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{lock.unlock();}}}
package lock.produce.comsumer;/** * 生产者线程 * @author Administrator * */public class MyThreadA extends Thread{private MyService myService;public MyThreadA(MyService myService){this.myService = myService;}public void run(){for(int i=0;i<5;i++){myService.set();}}}
package lock.produce.comsumer;public class MyThreadB extends Thread{/** * 消费者线程 */private MyService myService;public MyThreadB(MyService myService){this.myService = myService;}public void run(){for(int i=0;i<5;i++){myService.get();}}}
五。测试类:
package lock.produce.comsumer;public class Main {public static void main(String[] args) {// TODO Auto-generated method stubMyService myService = new MyService();MyThreadA a = new MyThreadA(myService);a.start();MyThreadB b = new MyThreadB(myService);b.start();}}
六。测试结果:
打印*
打印&
打印*
打印&
打印*
打印&
打印*
打印&
打印*
打印&
0 0
- java多线程--ReentrantLock实现生产者与消费者模式
- 多线程实现生产者与消费者模式
- ReentrantLock方式实现生产者-消费者模式
- 使用ReentrantLock实现生产者消费者模式
- java多线程实现生产者消费者模式
- Java多线程实现消费者/生产者模式
- Java多线程实现生产者消费者模式
- java 多线程实现生产者消费者模式
- Java多线程实现简单生产者消费者模式
- java多线程实现生产者与消费者
- 设计模式-生产者与消费者Java实现
- 【Java多线程】多线程之间实现通讯与生产者与消费者模式
- java多线程 ----生产者消费者模式
- Java多线程 --- 生产者消费者模式
- Java多线程 生产者消费者模式
- java多线程---生产者消费者模式
- java 多线程 生产者消费者模式
- 【Java多线程】生产者消费者模式
- Linux线程浅析[关于线程的清理,与进程的对比,以及线程的各个状态]
- 【算法谜题】夜过吊桥
- SQLite基础入门
- HashMap和TreeMap
- 深入理解Java虚拟机学习笔记——三、虚拟机类加载机制
- java多线程--ReentrantLock实现生产者与消费者模式
- tensorflow学习-示例1(MNIST数据集合上的softmax分类模型)
- EffectiveJava(37) -- 学会使用标记注解与标记接口
- 实战配置nginx+tomcat+memcached
- SD-WAN介绍
- Collection和Array转换
- 如何找到R文件
- MySQL在大型网站的应用架构演变
- 深度学习笔记(六)finetune