Quasar ReenterantReadWriteLock не может быть получен

У меня есть замок:

private ReentrantReadWriteLock requestWaitingLock;

И я выполняю этот блок внутри Fiber:

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

И это потому, что в документации сказано:

общедоступная блокировка void ()
Получает блокировку записи, если ни одна из цепочек чтения и записи не удерживается другой цепью, и немедленно возвращается, устанавливая значение удержания блокировки записи равным единице.
Если текущая цепочка уже содержит блокировку записи, то счетчик удержаний увеличивается на единицу, и метод немедленно возвращается.
Если блокировка удерживается другой цепью, то текущая цепочка отключается для целей планирования цепочки и остается в неактивном состоянии до тех пор, пока блокировка записи не будет получена, и в это время счетчик удержания блокировки записи будет установлен в единицу.

Итак, я получаю этот вывод:

false
0

Это означает, что ни блокировка чтения, ни записи не удерживаются Strand совсем. Так почему мой Fiber быть заблокированным?

РЕДАКТИРОВАТЬ. Я почти уверен, что каждое волокно, которое получает этот замок, освободит его, поэтому невозможно, чтобы другие волокна приобретали его бесконечно.

1 ответ

Решение

Вы, кажется, вызываете неправильный метод для проверки блокировки считывателя:

  • getReadHoldCount - только для текущей темы
  • getReadLockCount - для всех потоков в системе
Другие вопросы по тегам