无法获得Quasar ReenterantReadWriteLock

时间:2016-11-15 08:27:14

标签: java multithreading reentrantlock reentrantreadwritelock quasar

我有一个lock

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,从而获取写入锁定。   如果当前链已经保持写锁定,则保持计数增加1并且该方法立即返回   如果锁由另一条链保持,则当前链变为禁用以进行链调度,并且在获取写锁之前处于休眠状态,此时写锁保持计数被设置为1。

所以我得到了这个输出:

false
0

这意味着任何Strand都不会保持读取和写入锁定。那么为什么Fiber会被封锁?

编辑。我很确定获得此锁定的每根光纤都会释放它,因此其他光纤无法无限地获取它。

1 个答案:

答案 0 :(得分:0)

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

  • getReadHoldCount - 仅限当前主题
  • getReadLockCount - 适用于系统中的所有主题