0

У меня lock: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"); 

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

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

Так я получаю этот выход:

false 
0 

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

EDIT. Я уверен, что каждое волокно, которое приобретает этот замок, освободит его, поэтому невозможно, чтобы другие волокна приобретали его бесконечно.

ответ

0

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

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