0

我有一把

private ReentrantReadWriteLock requestWaitingLock;

我在一个里面执行这个块Fiber

System.out.println(requestWaitingLock.isWriteLocked());
System.out.println(requestWaitingLock.getReadHoldCount());
requestWaitingLock.writeLock().lock();
System.out.println("write lock acquired");

那是因为在文档中它说:

public void lock()
如果读锁和写锁都没有被另一个链持有,则获取写锁并立即返回,将写锁持有计数设置为 1。
如果当前链已经持有写锁,那么持有计数加一并且方法立即返回。
如果锁被另一个 strand 持有,则当前 strand 出于 strand 调度目的而被禁用并处于休眠状态,直到获得写锁为止,此时写锁持有计数设置为 1。

所以我得到这个输出:

false
0

这意味着读锁和写锁都不被任何人持有Strand。那为什么我的Fiber被屏蔽了?

编辑。我很确定每一个获得这个锁的纤程都会释放它,所以其他纤程不可能无限地获得它。

4

1 回答 1

0

您似乎调用了不正确的方法来检查阅读器锁:

  • getReadHoldCount- 仅适用于当前线程
  • getReadLockCount- 对于系统中的所有线程
于 2016-11-15T18:21:04.983 回答