首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在catch块中调用ReentrantReadWriteLock#lock()是否出错?

在catch块中调用ReentrantReadWriteLock#lock()是否出错?
EN

Stack Overflow用户
提问于 2014-03-22 22:57:09
回答 1查看 245关注 0票数 4

在目前发行的“德国Java杂志”中,有一个代码示例,说明ReentrantReadWriteLock (我猜一般是ReadWriteLock )经常被错误使用。不幸的是,提交人不愿解释原因。

代码语言:javascript
复制
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();不抛出(编辑:错误的假设,见已接受的答案),这些版本看起来和我一样。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-22 23:03:39

看看Lock.lock()

实现注意事项 lock实现可能检测到锁的错误使用,例如会导致死锁的调用,在这种情况下,可能会抛出(未检查的)异常。这种情况和异常类型必须由Lock实现来记录。

强调我的。

因此,根据合同,它可以抛出一个Exception。这就解释了为什么第二种方法是错误的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22584762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档