java - 读/写锁的条件
问题描述
在Java中,既然ReadLocks
不能有条件,那么在 之间使用条件的正确方法是Read/Write locks
什么?
这是我的并发队列类:
private class ConcurrentQ{
ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
Lock readLock = readWriteLock.readLock();
Lock writeLock = readWriteLock.writeLock();
Condition emptyList = writeLock.newCondition();
Queue<Integer> list = new LinkedList<>();
/* */
public void push(int x, int thread){
try{
writeLock.lock();
list.offer(x);
emptyList.signalAll();
} catch (Exception ex){
} finally {
writeLock.unlock();
}
}
//Must look at empty case
public void pop(int thread){
int val = -1;
try{
writeLock.lock();
val = list.poll();
} catch (Exception e){
} finally {
writeLock.unlock();
}
}
public void peek(int thread){
int val = -2;
try{
readLock.lock();
while(list.isEmpty())
emptyList.await(); //////PROBLEM HERE!
val = list.peek();
} catch (Exception e) {
} finally {
readLock.unlock();
}
}
}
这里有一个问题。由于ReadLock
不能有条件,我在WriteLock
BUT 中添加了一个条件,但我不能在我正在使用的块内调用它,readLock.lock() ... readLock.unlock()
所以我该怎么办?在我的方法中,如果为空peek()
,我想等待。list
谢谢
解决方案
推荐阅读
- spring-boot - zipkin 错误在类路径资源中定义名称为“webMvcMetricsFilter”的 bean 创建错误
- android - 实例化类时未触发 Appcompatactivity onCreate()
- javascript - 当多个复选框/选择组合的下拉更改时选中一个复选框
- arrays - 在 PrintArray() 函数中出现分段错误
- android - 启动 Intent 时相机在 Android 10 上崩溃
- go - 谷歌存储文件下载
- javascript - 如何在主页标题中添加按钮链接但在其他页面中添加不同?
- uwp - 将 ContentPropertyAttribute 与 C++/WinRT 一起使用?
- angular - 以角度将具有结构的HTML表格复制到剪贴板
- angular - 使用angular8输入正确的输入值后如何消除验证错误