我有一把锁:
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
被屏蔽了?
编辑。我很确定每一个获得这个锁的纤程都会释放它,所以其他纤程不可能无限地获得它。