25

私はこれをHeinzKabutzのJavaスペシャリストニュースレター版の1つで見ました。そして、Kabutz博士の記事の残りの部分(そして実際にはすべて)は十分に説明され、詳細に説明されていますが、彼はこのコードが何をしているのか、またはもっと重要なことに、その重要性は次のとおりです。

public class SomeObject {
    private Object lock1;
    private Object lock2;

    public void doSomething() {
        synchronized(lock1) {
            synchronized(lock2) {
                // ...
            }
        }
    }
}

ネストsynchronizedブロックの意味は何ですか?これは、試行するさまざまなスレッドにどのように影響しdoSomething()ますか?

4

3 に答える 3

35

注意が必要な問題が 2 つあります。

  1. ネストされたロックは、待機/通知を使用している場合、非常に簡単にデッドロックを引き起こす可能性があります。ここに理由の説明があります。http://tutorials.jenkov.com/java-concurrency/nested-monitor-lockout.html

  2. 別のメソッドが同じ 2 つのオブジェクトをロックしたい場合は、常に同じ順序でロックする必要があることに注意する必要があります。そうしないと、この投稿で説明されているように、別のデッドロック状況が発生する可能性があります

于 2012-04-28T16:10:53.377 に答える