我一直在寻找源代码,DatagramSocket
发现了这一点:
public void disconnect() {
synchronized (this) {
if (isClosed())
return;
if (connectState == ST_CONNECTED) {
impl.disconnect ();
}
connectedAddress = null;
connectedPort = -1;
connectState = ST_NOT_CONNECTED;
}
}
我对同步方法的理解是它们会锁定this
。那么代码是否等效于以下代码?
public synchronized void disconnect() {
if (isClosed())
return;
if (connectState == ST_CONNECTED) {
impl.disconnect ();
}
connectedAddress = null;
connectedPort = -1;
connectState = ST_NOT_CONNECTED;
}
语言设计者为什么在这里选择不使用同步方法,这是有原因的吗?
是的,这两个代码段是等效的。
我们只能猜测,为什么编写此代码的人选择了更详细的版本。这可能是某人的个人喜好,也可能是历史文物。例如,它可能以前曾经synchronized(someObject)
或仅覆盖过该方法的一部分,而重构该方法的人并没有将本synchronized
节转换为synchronized
方法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句