我有一个方法
public synchronized x() {
y();
}
private y() { }
y()仅由x()调用。所以我的问题是y()必须也是一个同步方法?或者只是暗示?
答案 0 :(得分:2)
如果您确定y仅由y
调用,则无需同步x
。这相当于将y
的代码直接放入x
。
答案 1 :(得分:0)
如果仅从x()函数调用y(),则不需要再次使y同步。但请注意,y()不应该是静态的。您的解决方案保持良好,直到x()和y()都是实例方法或两者都是静态方法。
答案 2 :(得分:0)
您可能希望熟悉监视器的概念。在您的情况下,访问x()
的线程将拥有该对象的监视器。任何其他想要拥有该监视器的线程都被阻止。即另一个线程可以调用y()
,因为它未同步,如果另一个线程想要获得该监视器的所有权(例如,调用x()
),则会阻止另一个线程。当线程从x()
返回时,监视器将被隐式释放。