同步方法调用另一个调用wait()的同步方法

时间:2012-10-20 22:08:31

标签: java synchronized

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

E.g。

    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()返回?

1 个答案:

答案 0 :(得分:0)

没有。在调用a和随后b时,其他任何方法都无法输入ab(或类A或{{1}的任何其他同步方法})。但是B释放了b.wait()上所有同步方法的锁定,因为

B

基本上等同于

public synchronized String b()