我正在寻找一种将功能synchronized
与java.util.concurrent.locks.ReentrantReadWriteLock
. 更具体地说,我想要一种方法来仅在WriteLock
设置 时锁定,但我希望锁定在对象变量上,例如synchronized
. 以下是有助于解释的示例:
ReentrantReadWriteLock 示例
public void methodOne(String var) {
lock.writeLock().lock;
try {
// Processing
}
finally {
lock.writeLock().unlock();
}
}
public void methodTwo(String var) {
lock.readLock().lock;
try {
// Processing
}
finally {
lock.readLock().unlock();
}
}
在这个例子中,methodTwo
只要writeLock
onmethodOne
没有被锁定,就可以在没有阻塞的情况下调用。这很好,也是我正在寻找的功能,但是当writeLock
被锁定时,它在所有情况下都被锁定var
。相反,我希望它只像这样var
锁定synchronized
:
同步示例
public void methodOne(String var) {
synchronized(var) {
// Processing
}
}
public void methodTwo(String var) {
synchronized(var) {
// Processing
}
}
现在,这些方法只会在输入条件下阻塞。这很好,也是我正在寻找的,但是如果有多个并发调用methodTwo
使用相同的键,它们会阻塞。相反,我希望这是一个“读取”样式的锁并允许调用。
本质上,我想要一个可以同步到变量以获得两组功能的 ReadWriteLock。