0

reentrantReadWriteLock を適用し、それがロックされている場合、別のスレッドが既に別のブロックを実行している間に別のスレッドが Lock にアクセスするとどうなりますか? (したがって、.unlock に到達する前に)

メソッドはキャンセルされますか?それとも止まっているのでしょうか?:O

4

4 に答える 4

2

ReentrantReadWriteLock と言ったので、動作は、ReadWriteLock に関連付けられた読み取りロックまたは書き込みロックのどちらを取るかによって異なります。

  1. 書き込みロックを取得しようとしている場合は、すべての所有者がロックを解除するまでブロックされます (読み取りロックか書き込みロックかに関係なく)。
  2. 読み取りロックを取得しようとしていて、書き込みロックの所有者がいない場合は、他の読み取りロックの所有者がいる場合でも常に取得できます。
  3. 読み取りロックを取得しようとしていて、書き込みロックの所有者がいる場合、書き込みロックの所有者が書き込みロックを解放するまでブロックされます。

読み取りロックは、ライターがない限り、複数のスレッドが同時に保持できます。

于 2011-08-20T00:09:31.743 に答える
1

ロックが使用可能になるまで、スレッドはブロックされます。(ドキュメント)

利用可能な場合にのみロックを取得したい場合は、tryLock()を使用できます。

于 2011-08-19T16:23:37.580 に答える
1

スレッドはブロックされます。複数のスレッドがこのロックを取得しようとすると、それらすべてがブロックされます。ロックが解放されると、待機中のプールから 1 つのスレッドだけがロックを取得し、残りは引き続き待機します。公平なロックと不公平なロックの違いをご覧ください。

于 2011-08-19T16:25:49.197 に答える
0

ブロックしたくない場合は、Lock.tryLock()(待機せずに試行する)またはtryLock(long time, TimeUnit unit)指定した時間だけ待機するを使用できます。

于 2011-08-19T16:25:50.003 に答える