为什么没有办法检查当前线程是否持有ReentrantReadWriteLock的读锁?

时间:2012-12-18 17:20:20

标签: java multithreading concurrency java.util.concurrent concurrent-programming

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

但是没有相应的isHeldByCurrentThread()方法用于读锁定。为什么不呢?

2 个答案:

答案 0 :(得分:14)

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

Doug Lea写道:

  

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

答案 1 :(得分:3)

ReentrantReadWriteLock.getReadHoldCount()似乎可以胜任。