3

如果一个同步方法调用另一个同步方法(在另一个类中),它会执行 wait()。尽管在另一个类中,锁是否也会在第一个同步方法中释放?

例如

    public class A {
        private B b;

        public A(B b) {
           this.b = b;
        }

        public synchronized String a() {
           return b.b();
        }
   }

    public class B {

        public synchronized String b() {
            while (!someCondition) wait();
            return "Success!";
        }
    }

所以我的问题是,是否可以在 someCondition = false 期间在 A 中输入另一个同步方法?或者 wait() 是否可以在 B 中输入其他同步方法,而在 A 中输入另一个同步方法的尝试将失败,直到 a() 返回?

4

1 回答 1

0

a不可以。在随后调用和b时,没有其他方法可以输入ab(或任何其他类的同步方法Aor B)。b.wait()但是释放对所有同步方法的锁定,B因为

public synchronized String b() 

本质上等同于

public String b() {
   synchronized(this) {
    ..
   }
}
于 2012-10-20T22:11:36.983 回答