gpt4 book ai didi

java - 在 Java 中, `synchronized` 等同于 `synchronized (this)` 吗?

转载 作者:行者123 更新时间:2023-11-29 03:05:23 25 4
gpt4 key购买 nike

我正在查看 DatagramSocket 的源代码,我发现了这个:

public void disconnect() {
synchronized (this) {
if (isClosed())
return;
if (connectState == ST_CONNECTED) {
impl.disconnect ();
}
connectedAddress = null;
connectedPort = -1;
connectState = ST_NOT_CONNECTED;
}
}

我对synchronized methods的理解是他们锁定了 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 部分转换为同步方法。

关于java - 在 Java 中, `synchronized` 等同于 `synchronized (this)` 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32474815/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com