【发布时间】:2014-01-29 09:47:08
【问题描述】:
我有一个方法
public synchronized x() {
y();
}
private y() { }
y() 仅由 x() 调用。所以我的问题是 y() 也必须是一个同步方法?还是只是隐含的?
【问题讨论】:
标签: java synchronized
我有一个方法
public synchronized x() {
y();
}
private y() { }
y() 仅由 x() 调用。所以我的问题是 y() 也必须是一个同步方法?还是只是隐含的?
【问题讨论】:
标签: java synchronized
如果您确定 y 仅由 x 调用,则无需同步 y。这相当于将y 的代码直接放入x。
【讨论】:
如果仅从 x() 函数调用 y(),则无需再次使 y 同步。但是请注意, y() 不应该是静态的。在 x() 和 y() 都是实例方法或两者都是静态方法之前,您的解决方案会一直保持良好状态。
【讨论】:
您可能想熟悉监视器的概念。在您的情况下,x() 的访问线程将拥有该对象的监视器。任何其他也想拥有该监视器的线程都被阻止。 IE。另一个线程可以调用y(),因为它不同步,如果另一个线程想要获得该监视器的所有权(例如调用x()),则它会被阻塞。当线程从x()返回时,监视器将被隐式释放。
【讨论】: