0

を取得することができない私は、lockを持ってクエーサーReenterantReadWriteLockが

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

とドキュメントにそれが言うので、「その:

public void lock()
neithの場合は書き込みロックを取得します。読み出しまたは書き込みロックが別のストランドによって保持され、直ちに戻り、書き込みロック保持カウントが1に設定されます。
現在のストランドがすでに書き込みロックを保持している場合、ホールドカウントは1だけインクリメントされ、メソッドはただちに戻ります。
ロックが別のストランドによって保持されている場合、現在のストランドはストランドスケジューリングの目的で無効になり、書き込みロックが取得されるまで休止状態になり、その時点で書き込みロック保持カウントは1に設定されます。

false 
0 

これは、どちらもまったくStrandによって保持されて読み取ることも、ロックを書く意味:

は、だから私はこの出力を取得します。だからなぜ私はFiberがブロックされていますか?

EDIT。私は、このロックを取得するすべてのファイバーがそれを解放することを確信しています。したがって、他のファイバーがそれを無限に獲得することはできません。

答えて

0

あなたはリーダーロックをチェックするために間違ったメソッドを呼び出しているように見える:

  • getReadHoldCountから
システム内のすべてのスレッドのために - 現在のスレッドのためにのみ
  • getReadLockCount
  • 関連する問題