質問
スコープを出るときにリソースを解放する最良の方法は何ですか(この場合はReadWriteLockをロック解除します)?可能性のあるすべての方法(リターン、ブレーク、例外など)をカバーする方法は?
解決
try / finallyブロックは、この動作に到達できる最も近いものです。
Lock l = new Lock();
l.lock(); // Call the lock before calling try.
try {
// Do some processing.
// All code must go in here including break, return etc.
return something;
} finally {
l.unlock();
}
他のヒント
マイクのように、finallyブロックを選択する必要があります。 最終ブロックチュートリアルを参照してください。 :
finallyブロックは、常に tryブロックが終了します。これにより、 finallyブロックは次の場合でも実行されます 予期しない例外が発生します。
より良い方法は、try-with-resourcesステートメントを使用することです。これにより、C ++の RAIIメカニズム:
public class MutexTests {
static class Autolock implements AutoCloseable {
Autolock(ReentrantLock lock) {
this.mLock = lock;
mLock.lock();
}
@Override
public void close() {
mLock.unlock();
}
private final ReentrantLock mLock;
}
public static void main(String[] args) throws InterruptedException {
final ReentrantLock lock = new ReentrantLock();
try (Autolock alock = new Autolock(lock)) {
// Whatever you need to do while you own the lock
}
// Here, you have already released the lock, regardless of exceptions
}
}
所属していません StackOverflow