gpt4 book ai didi

java - 我的代码线程安全吗?

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

在我的 java 应用程序中,我有一个字符串 (MySingleton.getInstance().myString),它会根据用户操作进行更新。在此应用程序中,有一个 TCP 服务器在字符串值发生变化时将此字符串的值发送给所有连接的客户端。

每个客户端套接字都有自己的线程。这是线程代码。

    public void run() {
try {
PrintStream printStream = new PrintStream(hostThreadSocket.getOutputStream(), true);
while (true) {
synchronized (MySingleton.getInstance()) {
printStream.println(MySingleton.getInstance().myString);
try {
MySingleton.getInstance().wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}

这是写入 MySingleton.getInstance().myString 的代码。

    public void updateString(String newString) {
synchronized (MySingleton.getInstance()) {
MySingleton.getInstance().myString = newString;
MySingleton.getInstance().notifyAll();
}
}

我不熟悉 java 中的同步,所以我对我的代码不太自信。有人能注意到什么不对吗?

最佳答案

如果 MySingleton.getInstance() 始终返回相同的对象,应该没问题。

如果方法调用在不同的时间点返回不同的对象,那么你可能会因为在一个实例上同步,然后在不同的实例上调用等待或通知而出现异常。此外,可能存在内存危险,因为您没有在您正在访问/更新的对象上进行同步。

关于java - 我的代码线程安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30565114/

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