gpt4 book ai didi

java - 线程卡在 readUTF() 中

转载 作者:行者123 更新时间:2023-12-02 02:51:05 27 4
gpt4 key购买 nike

我有以下类(class):

public class Prices {

String priceValues;

public String getPriceValues() {
return priceValues;
}

public void setPriceValues(String priceValues) {
this.priceValues = priceValues;
}
}

这是我在 SocketServer 类中的 run 方法:

public void run() {
while(true) {
try {
DataInputStream in = new DataInputStream(server.getInputStream());

System.out.println(in.readUTF());
prices.setPriceValues(in.readUTF());
DataOutputStream out = new DataOutputStream(server.getOutputStream());
out.writeUTF("Thank you for connecting to " + server.getLocalSocketAddress()
+ "\nGoodbye!");
//server.close();

}catch(SocketTimeoutException s) {
System.out.println("Socket timed out!");
break;
}catch(IOException e) {
e.printStackTrace();
break;
}
}
}

一切运行良好,但我想以任何类都可以访问的方式存储从客户端接收到的内容。所以我创建了一个名为 Prices 的类。

但是,线程卡在以下行:

prices.setPriceValues(in.readUTF());

prices 变量不为空,当我取出这一行时,一切运行正常。

最佳答案

System.out.println(in.readUTF());
prices.setPriceValues(in.readUTF());

您调用了 in.readUTF() 两次。这很可能不是你想要的。删除第一行,或将结果存储在变量中:

String s = in.readUTF();
System.out.println(s);
prices.setPriceValues(s);

请注意,在没有任何同步的情况下从多个线程设置和获取字段不是线程安全的。

关于java - 线程卡在 readUTF() 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43837589/

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