在可能已经解锁的锁上调用unlock()是否安全?

时间:2015-09-16 14:50:34

标签: java multithreading locking reentrantreadwritelock

在这个例子中:

private ReentrantReadWriteLock mLock = new ReentrantReadWriteLock();

public void method(boolean condition) {
    try {
        mLock.writelock.lock()

        if (condition) {
            mLock.writelock.unlock();
        }
    } finally {
        mLock.writelock.unlock();
    }
}

如果mLock.writelock.unlock()语句中的解锁已执行,finally块中调用if会发生什么?

此代码是否安全,或者在尝试解锁之前是否需要检查是否存在锁定?

1 个答案:

答案 0 :(得分:1)

根据文档似乎非常简单,并且在重新执行IllegalMonitorStateException时应该抛出ReentrantReadWriteLock.WriteLock.html#unlock

  

尝试释放此锁定。如果当前线程是持有者   此锁定然后保持计数递减。如果保持计数现在   零,然后释放锁。如果当前线程不是   这个锁的持有者然后抛出IllegalMonitorStateException。

Documentation Link

在最终解锁执行时执行条件也会逃脱异常。