繁体   English   中英

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

[英]Synchronized method calling another synchronized method which calls wait()

如果一个synchronized方法调用另一个同步方法(在另一个类中),它执行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()返回?

在调用a和随后的b ,没有其他方法既不能输入ab (或A类或B类的任何其他同步方法)。 但是b.wait()会释放对B上所有同步方法的锁定

public synchronized String b() 

基本上相当于

public String b() {
   synchronized(this) {
    ..
   }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM