在这个例子中:
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
会发生什么?
此代码是否安全,或者在尝试解锁之前是否需要检查是否存在锁定?
答案 0 :(得分:1)
根据文档似乎非常简单,并且在重新执行IllegalMonitorStateException
时应该抛出ReentrantReadWriteLock.WriteLock.html#unlock
。
尝试释放此锁定。如果当前线程是持有者 此锁定然后保持计数递减。如果保持计数现在 零,然后释放锁。如果当前线程不是 这个锁的持有者然后抛出IllegalMonitorStateException。
在最终解锁执行时执行条件也会逃脱异常。