1

以下はEffective Java 2nd addで書かれています: -

たとえば、ファイナライザーに依存して、データベースなどの共有リソースの永続的なロックを解放することは、分散システム全体を停止させる良い方法です。

なぜなら、

到達できなくなった一部のオブジェクトに対してファイナライザーを実行せずにプログラムが終了する可能性は十分にあります。

では、以下のコードを書いてもよろしいでしょうか?

 public void doSomething(long abc) {
    //Needs to wait on lock to avoid updates
    ReentrantLock lock = mainLock;
    lock.lock();

    try {

    } finally {
        if (lock.isHeldByCurrentThread()) {
            lock.unlock();
        }
    }
}
4

3 に答える 3

0

finally{} ブロックで常にロックを解除する必要があります。lock.isHeldByCurrentThread()プログラムが finally ブロックに達した場合、ロックは常に現在のスレッドによって取得されるため、チェックを行うべきではありません。

于 2013-10-24T10:23:20.350 に答える
0

以下のコードは使用しないでください

lock.isHeldByCurrentThread()

早くやれよ:

finally {     
            lock.unlock();        
    }
于 2013-10-24T10:28:16.720 に答える