0

Ich habe eine lock:Quasar ReenterantReadWriteLock können nicht erworben werden

private ReentrantReadWriteLock requestWaitingLock; 

Und ich bin Ausführung dieses Blocks in einem Fiber:

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

Und das, weil in docs sagt es :

public void lock()
die Schreibsperre erwirbt wenn neith Die Lese- oder Schreibsperre wird von einem anderen Strang gehalten und kehrt sofort zurück, wobei der Zählwert für die Schreibsperre auf eins gesetzt wird.
Wenn der aktuelle Strang bereits die Schreibsperre enthält, wird die Haltezählung um eins erhöht und die Methode kehrt sofort zurück.
Wenn die Sperre von einem anderen Strang gehalten wird, wird der aktuelle Strang für Strangplanungszwecke deaktiviert und ruht, bis die Schreibsperre erreicht wurde. Zu diesem Zeitpunkt wird die Schreibsperre auf 1 gesetzt.

So bekomme ich diese Ausgabe:

false 
0 

Das bedeutet weder lesen noch schreiben Sperre von jedem Strand überhaupt gehalten werden. Warum wird meine Fiber blockiert?

BEARBEITEN. Ich bin mir ziemlich sicher, dass jede Faser, die diese Sperre erwirbt, sie freigibt, also ist es nicht möglich, dass andere Fasern sie unendlich erwerben.

Antwort

0

Sie scheinen falsche Methode aufrufen Leser Sperren zu überprüfen:

  • getReadHoldCount - für aktuellen Thread nur
  • getReadLockCount - für all Threads im System
Verwandte Themen