Java基于Lock的生产者消费者模型示例

发布于 2020-11-23|标签java
复制链接
摘记: 本文实例讲述了Java基于Lock的生产者消费者模型。分享给大家供大家参考,具体如下:前面一篇《Java锁机制Lock用法》简单介绍了锁机制,这里进一步分析一下基于lock的生产者消费者模型。 ..
本文实例讲述了Java基于Lock的生产者消费者模型。分享给大家供大家参考,具体如下:前面一篇《Java锁机制Lock用法》简单介绍了锁机制,这里进一步分析一下基于lock的生产者消费者模型。 ```java package com.expgiga.JUC; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 生产者消费者案例 */ public class TestProductorAndConsumerForLock { public static void main(String[] args) { Clerk clerk = new Clerk(); Productor productor = new Productor(clerk); Consumer consumer = new Consumer(clerk); new Thread(productor, "生产者A").start(); new Thread(consumer, "消费者B").start(); new Thread(productor, "生产者C").start(); new Thread(consumer, "消费者D").start(); } } //店员 class Clerk { private int product = 0; private Lock lock = new ReentrantLock(); private Condition condition = lock.newCondition(); //进货方法 public void get() { lock.lock(); try { while (product >= 1) { //为了避免虚假唤醒,应该总是使用在循环中 System.out.println("产品已满!"); try { condition.await(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName() + " : " + ++product); condition.signalAll(); } finally { lock.unlock(); } } //卖货方法 public void sale() { lock.lock(); try { while (product 运行结果: 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 产品已满! 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 产品已满! 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 产品缺货! 生产者C : 1 消费者B : 0 产品缺货! 产品缺货! 生产者A : 1 消费者B : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 产品缺货! 生产者C : 1 消费者D : 0 产品缺货! 生产者A : 1 消费者D : 0 更多java相关内容感兴趣的读者可查看本站专题:《Java进程与线程操作技巧总结》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》原文地址: https://blog.csdn.net/u013063153/article/details/76407240
冀ICP备17029012号-4 | 版权所有©鲍亚龙 |免责声明  | GIF图库  | NUXT版