ata*_*man 4 java concurrency locking java.util.concurrent
在最新一期的《德国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();
Run Code Online (Sandbox Code Playgroud)
我明白了为什么#3是错的。但是#1和#2之间有什么区别?假设lock.writeLock().lock();没有抛出异常(编辑:错误的假设,请参见接受的答案),这些版本与我相同。
实施注意事项
锁实现可能能够检测到锁的错误使用,例如可能导致死锁的调用,并且在这种情况下可能引发(未经检查的)异常。该Lock实现必须记录情况和异常类型。
强调我的。
因此,根据合同,它被允许扔一个Exception。这就解释了为什么第二种方法是错误的。
| 归档时间: |
|
| 查看次数: |
150 次 |
| 最近记录: |