gpt4 book ai didi

java - 在 catch block 中调用 ReentrantReadWriteLock#lock() 是否错误?

转载 作者:搜寻专家 更新时间:2023-11-01 02:25:59 25 4
gpt4 key购买 nike

在最新一期的德国 Java 杂志中,有一个代码示例如何经常错误地使用 ReentrantReadWriteLock(我猜 ReadWriteLock)。不幸的是,作者不想解释原因。

private static final ReadWriteLock lock = new ReentrantReadWriteLock();

// #1: correct use
lock.writeLock().lock();
try {
// do stuff
} finally {
lock.writeLock().unlock();
}

// #2: incorrect use
try {
lock.writeLock().lock();
// do stuff
} finally {
lock.writeLock().unlock();
}

// #3: incorrect use
lock.writeLock().lock();
// do stuff
lock.writeLock().unlock();

我明白为什么 #3 是错误的。 但是#1 和#2 之间有什么区别?假设 lock.writeLock().lock(); 不会抛出 (编辑:错误的假设,请参阅接受的答案),这些版本看起来和我一样。

最佳答案

查看Javadoc for Lock.lock()

Implementation Considerations

A Lock implementation may be able to detect erroneous use of the lock, such as an invocation that would cause deadlock, and may throw an (unchecked) exception in such circumstances. The circumstances and the exception type must be documented by that Lock implementation.

强调我的。

因此根据契约(Contract)允许抛出Exception。这就解释了为什么第二种方法是错误的。

关于java - 在 catch block 中调用 ReentrantReadWriteLock#lock() 是否错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22584762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com