我可以访问Java中同步块使用的锁吗?

我可以访问Java中同步块使用的锁吗?,java,multithreading,locking,synchronized,Java,Multithreading,Locking,Synchronized,有一个简单的列表: private final List<Item> lst = new ArrayList(); 现在,我需要使用Lock.newCondition()创建一个Condition对象,我可以访问synchronized{}使用的底层锁来创建我的条件吗,或者我应该删除同步块并使用自定义的Lock对象吗?如果需要Condition对象,这是一个明确的信号,表明内在锁定对您来说是不够的。您需要使用 Lock lock = new ReentrantLock();

有一个简单的列表:

private final List<Item> lst = new ArrayList();

现在,我需要使用
Lock.newCondition()
创建一个
Condition
对象,我可以访问
synchronized{}
使用的底层锁来创建我的条件吗,或者我应该删除同步块并使用自定义的
Lock
对象吗?

如果需要Condition对象,这是一个明确的信号,表明内在锁定对您来说是不够的。您需要使用

    Lock lock = new ReentrantLock();
    Condition condition = lock.newCondition();

无论如何,如果你担心性能,这不是现代虚拟机的问题。显式锁定的性能和内在锁定一样好。

如果您需要一个条件对象,这清楚地表明内在锁定对您来说是不够的。您需要使用

    Lock lock = new ReentrantLock();
    Condition condition = lock.newCondition();

无论如何,如果你担心性能,这不是现代虚拟机的问题。显式锁定和内在锁定一样有效。

后者。这两个是不同的结构。你可能想提供更多的上下文-一个条件可能不是你想要达到的目标所必需的。相关:后者。这两个是不同的构造。您可能希望提供更多的上下文-您尝试实现的目标可能不需要条件。相关:如果您这样做,您可能可以删除内在锁定。通常不需要同时使用这两个锁。我会说,您几乎必须删除它,因为在没有精确的获取顺序的情况下获取两个锁可能会导致死锁。()如果您正在这样做,您可能可以移除内在锁定。通常不需要同时使用这两个锁。我会说,您几乎必须删除它,因为在没有精确的获取顺序的情况下获取两个锁可能会导致死锁。()