Java:嵌套的同步块

IAm*_*aja 21 java concurrency multithreading

我在亨氏Kabutz的一看到这个Java的专家通讯版本,虽然其余的(事实上,所有)Kabutz博士的文章都是很好解释和详细,他似乎在掩饰什么这段代码是干什么的,或者更重要的是,它的意义是:

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

    public void doSomething() {
        synchronized(lock1) {
            synchronized(lock2) {
                // ...
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

嵌套synchronized块的含义是什么?这对于尝试不同的线程doSomething()有何影响?

Bru*_*owe 33

有两个可能需要注意的问题

  1. 如果使用wait/notify,嵌套锁可能很容易导致死锁.这是对原因的解释.http://tutorials.jenkov.com/java-concurrency/nested-monitor-lockout.html

  2. 一个人应该警惕,如果另一个方法希望锁定相同的两个对象,它们必须始终以相同的顺序执行,否则可能会出现另一种死锁情况,如本文所述:如何避免嵌套同步和导致的死锁