9

我发现 的写锁ReentrantReadWriteLock提供了一种isHeldByCurrentThread()方法来检查调用线程是否持有该锁。

但是读锁没有对应isHeldByCurrentThread()的方法。为什么不?

4

2 回答 2

16

我认为答案在 Doug Leas 对此问题的评论中:http ://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6207928 。

道格·李写道:

当前的设计和行为是有意的。读锁通常没有定义为具有所有权的概念,因此无法测试所有权。... JSR166 EG 已收到一些请求,以可选地支持每线程读取保持跟踪。这样做会显着增加锁开销,因此需要由可选的构造参数控制。我们正在调查它。

于 2012-12-18T17:21:09.587 回答
3

ReentrantReadWriteLock.getReadHoldCount() 似乎可以完成这项工作。

于 2013-07-02T23:43:55.987 回答