我有一个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
会被封锁?
编辑。我很确定获得此锁定的每根光纤都会释放它,因此其他光纤无法无限地获取它。
答案 0 :(得分:0)
您似乎调用了不正确的方法来检查读卡器锁:
getReadHoldCount
- 仅限当前主题getReadLockCount
- 适用于系统中的所有主题