如果一个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()返回?
答案 0 :(得分:0)
没有。在调用a
和随后b
时,其他任何方法都无法输入a
或b
(或类A
或{{1}的任何其他同步方法})。但是B
释放了b.wait()
上所有同步方法的锁定,因为
B
基本上等同于
public synchronized String b()