我可以访问 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();

无论如何,如果您担心性能,那对于现代虚拟机来说不是问题。显式锁定的性能与内部锁定一样好。