我正在寻找一种将功能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只要writeLockonmethodOne没有被锁定,就可以在没有阻塞的情况下调用。这很好,也是我正在寻找的功能,但是当writeLock被锁定时,它在所有情况下都被锁定var。相反,我希望它只像这样var锁定synchronized:
同步示例
public void methodOne(String var) {
synchronized(var) {
// Processing
}
}
public void methodTwo(String var) {
synchronized(var) {
// Processing
}
}
现在,这些方法只会在输入条件下阻塞。这很好,也是我正在寻找的,但是如果有多个并发调用methodTwo使用相同的键,它们会阻塞。相反,我希望这是一个“读取”样式的锁并允许调用。
本质上,我想要一个可以同步到变量以获得两组功能的 ReadWriteLock。