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