タイトルが示すように、現在のスレッドがクラッシュしたときに readwritelock がどうなるか興味があります。
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
最終ブロックで確実にロックを解除して、突然の中断を防ぐことができます。しかし、readLock.lock() ステートメントがクラッシュした場合、ロックは自動的に解除されるのでしょうか?
ありがとう、
タイトルが示すように、現在のスレッドがクラッシュしたときに readwritelock がどうなるか興味があります。
readlock.lock();
try {
...
} finally {
readlock.unlock();
}
最終ブロックで確実にロックを解除して、突然の中断を防ぐことができます。しかし、readLock.lock() ステートメントがクラッシュした場合、ロックは自動的に解除されるのでしょうか?
ありがとう、
readlock.lock
例外をスローする場合。unlock
。中に実行時例外がスローされた場合readlock.lock
、まだロックが取得されています。lock
著者はそれを間違って実装しています。あなたは作者のためにバグレポートを提出することができます:)
クラスを参照すると、 (が呼び出されていない)java.util.concurrent.locks.ReentrantReadWriteLock
直後にスレッドがクラッシュしても、読み取りロックは解放されません。readlock.lock()
readlock.unlock()
ただし、書き込みロックとは異なります。書き込みロックは所有者を定義し、それを取得したスレッドによってのみ解放できます。対照的に、読み取りロックには所有権の概念がなく、読み取りロックを解放するスレッドがそれを取得したスレッドと同じである必要はありません。
readlock.lock()
try-finally ステートメントを入れることをお勧めします。
「readlock」変数の実装と「スレッドがクラッシュした方法」に依存します。私が見る限り、「readlock」変数は任意のタイプにすることができ、スレッドがクラッシュする方法は複数あります。
参考までに、各 Java オブジェクトには「モニター」があります。複数のスレッドによる共有変数へのアクセスを同期する必要がある場合は、Java チュートリアルのこの章を読むことをお勧めします: http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html