【发布时间】:2021-08-05 09:07:38
【问题描述】:
如果一个方法是同步的,被调用的方法是否也必须同步?下面的例子中什么是正确的?
// Only parent method synchronized
public synchronized void parentMethod() {
childMethod1();
}
public void childMethod1() {
childMethod2();
}
public void childMethod2() {
}
// All methods synchronized
public synchronized void parentMethod() {
childMethod1();
}
public synchronized void childMethod1() {
childMethod2();
}
public synchronized void childMethod2() {
}
【问题讨论】:
-
取决于您的用例。 childMethod1 和 childMethod2 是否只能从 parentMethod 调用,或者它们也可以从其他调用者调用,并且在调用时需要同步?毕竟方法是公开的。
-
如果 childmethod 是私有的,答案可能会有所不同。它是按设计公开的吗?
-
任何保护非线程安全资源的方法都需要同步或使用其他形式的顺序化除非可以证明这已经在上游完成。需要分析。没有单一的答案。
标签: java concurrency thread-safety