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