Java ReEntrantLock 之 Condition条件(Java代码实战-002)
2023-09-11 14:17:56 时间
import java.util.LinkedList; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * ConditionTest * 一个测试类,用Condition实现的生产者消费者问题 */ public class ConditionTest { /* 定义一个容器(链表、队列) */ private LinkedList<String> buffer; /* 容器可以容纳元素的最大数量,通过构造函数来初始化 */ private int maxSize; private Lock lock; private Condition fullCondition; private Condition notFullCondition; ConditionTest(int maxSize) { this.maxSize = maxSize; buffer = new LinkedList<String>(); lock = new ReentrantLock(); fullCondition = lock.newCondition(); notFullCondition = lock.newCondition(); } /** * 向容器中放入Element */ public void set(String string) throws InterruptedException { // 获取锁 lock.lock(); try { while (maxSize == buffer.size()) { // 满了,添加的线程进入等待状态 notFullCondition.await(); } buffer.add(string); // 容器不为空时,则给等待的读取的线程发送信号以便唤醒这些线程进行读取 fullCondition.signal(); } finally { lock.unlock(); } } /** * 从容器中获取Element */ public String get() throws InterruptedException { String string; lock.lock(); try { while (buffer.size() == 0) { // 如果容器为空,则读取的线程进入等待状态 fullCondition.await(); } string = buffer.poll(); // 给写入的线程发送信号以便唤醒这些线程来往容器中写入 notFullCondition.signal(); } finally { lock.unlock(); } return string; } }
相关文章
- Java面向对象高级--抽象类的基本概念------abstract
- Java虚拟机详解04----GC算法和种类【重要】
- Java实现 LeetCode 730 统计不同回文子字符串(动态规划)
- Java实现 蓝桥杯 算法训练 乘法次数
- Java实现 LeetCode 209 长度最小的子数组
- Java中线程的操作状态
- java数组随机排序实现代码
- 【JAVA】MacBook安装Java环境及eclipse
- 编写高质量代码:改善Java程序的151个建议 --[106~117]
- [Java] HashMap源码分析
- 使用java代码判断一个字符串里是否包含中文字符
- Java单例模式(Singleton)的五种实现
- Ian在北京做的CFCA的Java代码
- atitit.人脸识别的应用场景and使用最佳实践 java .net php
- Java三大器之监听器(Listener)的工作原理和代码演示
- 【Java实战】这样写代码老大会夸赞你哦
- @Value的使用 《Spring源码解析》java笔记
- JAVA编程:java环境安装和helloworld
- java常用代码
- Java如何根据主机名(域名)获取IP地址?
- JAVA写代码必须知道的编程工具
- Foxit PDF SDK 8.4 for Windows (Java Library)
- 【java基础】类型擦除、桥方法、泛型代码和虚拟机
- 【Java】一篇文章带你了解Collection接口、List集合、Set集合、Map集合