![](/img/trans.png)
[英]Calling a synchronized method from another synchronized method, both on different object
[英]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
,没有其他方法既不能输入a
或b
(或A
类或B
类的任何其他同步方法)。 但是b.wait()
会释放对B
上所有同步方法的锁定
public synchronized String b()
基本上相当于
public String b() {
synchronized(this) {
..
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.