在Java中以原子方式释放多个锁

时间:2009-09-10 13:59:59

标签: java locking

如果我获得了许多锁,我如何以原子方式释放锁定组?

3 个答案:

答案 0 :(得分:5)

我很困惑你为什么需要原子地释放它们。 原子地获取它们,我能理解,虽然这样做的代码将是一个奇怪的野兽 - 一个干净的方法是将它们隐藏在主锁管理器后面的所有代码中,并同步它。但是什么代码会关心两个锁是一次性释放还是根本没有?

答案 1 :(得分:2)

看看JDK中的java.util.concurrent包描述,也许你会找到合适的sync primitibe。你问题中的信息不足以给出更具体的答案。

一种简单的方法(但可能不是最有效的方法)是使用'uberLock'来保护所有需要的锁,例如:

private final Lock uberLock = new ReentrantLock();
void lockAll() {
    uberLock.lock();
    try {
        // call lock() on all needed locks
    } finally {
        uberLock.unlock();
    }
}

答案 2 :(得分:2)

由于锁被视为独立对象(参见this question)而Java语言没有(但据我所知)在其JVM中提供了一种方法(必须将其实现为原子级的) )只需一步即可释放多个锁,这根本不可能。

也许可以重新设计您的应用程序,以便不再需要几个锁的原子释放。 (也许您还可以提供有关您的具体问题的更多详细信息,以便我们更好地理解)