我可以访问 Java 中同步块使用的锁吗?
Can I access the Lock used by a synchronized block in Java?
有一个简单的列表:
private final List<Item> lst = new ArrayList();
当我需要同步时,我曾经这样做过:
synchronized (lst) {
// Some code
}
现在,我需要使用 Lock.newCondition()
创建一个 Condition
对象,我可以访问 synchronized{}
使用的底层锁以使用它来创建我的条件,还是应该删除同步块并使用自定义 Lock
对象 ?
如果您需要一个 Condition 对象,则表明内在锁定对您来说是不够的。您将需要使用
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
无论如何,如果您担心性能,那对于现代虚拟机来说不是问题。显式锁定的性能与内部锁定一样好。
有一个简单的列表:
private final List<Item> lst = new ArrayList();
当我需要同步时,我曾经这样做过:
synchronized (lst) {
// Some code
}
现在,我需要使用 Lock.newCondition()
创建一个 Condition
对象,我可以访问 synchronized{}
使用的底层锁以使用它来创建我的条件,还是应该删除同步块并使用自定义 Lock
对象 ?
如果您需要一个 Condition 对象,则表明内在锁定对您来说是不够的。您将需要使用
Lock lock = new ReentrantLock();
Condition condition = lock.newCondition();
无论如何,如果您担心性能,那对于现代虚拟机来说不是问题。显式锁定的性能与内部锁定一样好。