线程插在readutf()中



我有以下类:

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);

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

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

您必须将结果存储在变量中,然后可以使用此变量打印或执行任何您想做的任何事情。

相关内容

  • 没有找到相关文章

最新更新