最近在学习SOCKET,碰到了个问题,想请教大虾们一下
  Socket st = new Socket(ip,port);
  DataInputStream in;
  DataOutputStream out;
  in = new DataInputStream(st.getInputStream());
  out = new DataOutputStream(st.getOutputStream());
在程序中开两个线程,分别执行不同的任务,Thread1负责往服务器发送报告1,Thread2负责往服务器发送报告2,报告1和报告2是不不同类型的数据,当某一时刻Thread1和Thread2同时往服务器发送报告的时候,即两线程同时调用out的时候,程序是否会发送错误?也就是想请教大虾们一下,JAVA中的SOCKET相关的对象是否线程安全?

解决方案 »

  1.   

    服务端有多个服务,不同的请求执行的服务不同
    这就好比一家快递公司,
    同时来两封快递,分别送到AB两处
    有两种方式,
    一种是让快递员a一个人去送这两封快递,
    另一种就是让快递员a送快递A
    快递员b送快递B是否安全的问题,这要看处理方式,不同的处理方式可能有所不同
      

  2.   

    每个连接用的不是同一个Socket连接对象,对应的流对象也不一样
      

  3.   

    如果是多线程的话,thread1和thread2就不是不一样的
    正常的话这些代码
         Socket   st   =   new   Socket(ip,port); 
        DataInputStream   in; 
        DataOutputStream   out; 
        in   =   new   DataInputStream(st.getInputStream()); 
        out   =   new   DataOutputStream(st.getOutputStream()); 
    应该在thread的run()方法里。所以out是不同的对象,使用的是不同的连接
    不会产出影响
      

  4.   

    假如我两个线程使用的是同一个out对象,会不会出问题?