Java ReEntrantLock 之 Condition条件(Java代码实战-002)详解编程语言
2023-06-13 09:20:46 时间
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;
}
15931.html
cjava相关文章
- 多种负载均衡算法及其 Java 代码实现详解编程语言
- Java加密算法 DSA 和 数字签名详解编程语言
- Java 中常用缓存Cache机制的实现详解编程语言
- java实现Socket编程实例代码详解编程语言
- java JNI: C 语言调用 Java 方法示例详解编程语言
- Java判断图片格式的代码详解编程语言
- java操作csv文件相关代码详解编程语言
- java获得指定日期的前一天,后一天的代码详解编程语言
- Java DES 加密/解密详解编程语言
- java将html转换为纯文本的代码详解编程语言
- 图片缩放的Java类详解编程语言
- java操作剪贴板代码示例详解编程语言
- Java代码 10进制转2、8、16进制转换 / 2、8、16进制转10进制转换详解编程语言
- Java HashMap 核心源码解读详解编程语言
- Java 多线程详解(二)——如何创建进程和线程编程语言
- java使用AES加密和解密代码示例详解编程语言
- Java中日期格式和其他类型转换详解编程语言
- JAVA实现图片与base64字符串之间的转换详解编程语言
- 实现使用Java代码实现MySQL数据库连接(java连接mysql数据库代码)
- 利用Redis存储Java对象的方法(redis存储java对象)
- java对象与map对象相互转换详解编程语言
- java字符转义 字符串中的双引号详解编程语言
- sha1加密java代码详解编程语言
- Java中Math类的几个四舍五入方法的区别详解编程语言
- 自己写一个java.lang.reflect.Proxy代理的实现详解编程语言