在目前发行的“德国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();不抛出(编辑:错误的假设,见已接受的答案),这些版本看起来和我一样。
发布于 2014-03-22 23:03:39
看看Lock.lock()
实现注意事项 lock实现可能检测到锁的错误使用,例如会导致死锁的调用,在这种情况下,可能会抛出(未检查的)异常。这种情况和异常类型必须由Lock实现来记录。
强调我的。
因此,根据合同,它可以抛出一个Exception。这就解释了为什么第二种方法是错误的。
https://stackoverflow.com/questions/22584762
复制相似问题