我发现ReentrantReadWriteLock
的写锁提供了一个isHeldByCurrentThread()
方法来检查调用线程是否持有该锁。
但是对于读锁没有相应的isHeldByCurrentThread()
方法。为什么不呢?
我认为答案在Doug Leas对这个问题的评论中:http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6207928.
Doug Lea写道:
当前的设计和行为是有意的。读取锁通常没有定义为具有所有权概念,因此无法测试所有权…JSR166EG收到了一些请求,可以选择支持每线程读取保持跟踪。这样做会显著增加锁开销,因此需要由可选的构造参数来控制。我们正在调查。
ReentrantReadWriteLock.getReadHoldCount()似乎完成了这项工作。