避免java中的多次锁定尝试

避免java中的多次锁定尝试,java,synchronization,locking,reentrantlock,Java,Synchronization,Locking,Reentrantlock,我有以下方法: public foo bar(String id) { Lock localLock = lockUtil.lock(id); try { do something; return foo; } finally { lock.unlock(); } } 我需要重写此方法以接受另一个参数 public foo bar(String id, Integer index) { Lock local

我有以下方法:

public foo bar(String id) {
    Lock localLock = lockUtil.lock(id);
    try {
        do something;
        return foo;
    } finally {
        lock.unlock();
    }
}
我需要重写此方法以接受另一个参数

public foo bar(String id, Integer index) {
    Lock localLock = lockUtil.lock(id);
    try {
        do something with index;
    } finally {
        lock.unlock();
    }

    return bar(id);
}

我的问题是,如何在不获得两次锁的情况下实现这一点(如果调用第二个方法)?我不想更改原始方法的签名,因为这意味着在系统中的10个不同位置进行更改。如果有任何想法,我将不胜感激。如果需要的话,我可以对这个问题作更多的澄清。谢谢。

return
语句放入
try
中,并使用
ReentrantLock
。是ReerrantLock的文档。我想到了ReentrantLock方法。但这两种方法都使用不同的锁对象。我不确定它是否适用于给定的用例。如果它们是不同的锁,并且您实际上需要两种锁来确保安全,那么您必须同时使用这两种锁。@merlin2011您能详细说明一下吗?