質問

スコープを出るときにリソースを解放する最良の方法は何ですか(この場合は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

    }

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top