-2

在这个例子中:

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(),在块中调用时会发生什么?finallyif

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

4

1 回答 1

1

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

尝试释放此锁。如果当前线程是这个锁的持有者,那么持有计数就会递减。如果保持计数现在为零,则释放锁。如果当前线程不是该锁的持有者,则抛出 IllegalMonitorStateException。

文档链接

在最终解锁执行时强制执行条件,这也会从异常中逃脱。

于 2015-09-16T14:54:37.573 回答