日期:2014-05-20  浏览次数:20644 次

java socket 多线程同时调用
最近在学习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相关的对象是否线程安全?

------解决方案--------------------
服务端有多个服务,不同的请求执行的服务不同
这就好比一家快递公司,
同时来两封快递,分别送到AB两处
有两种方式,
一种是让快递员a一个人去送这两封快递,
另一种就是让快递员a送快递A
快递员b送快递B

是否安全的问题,这要看处理方式,不同的处理方式可能有所不同
------解决方案--------------------
每个连接用的不是同一个Socket连接对象,对应的流对象也不一样
------解决方案--------------------
如果是多线程的话,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是不同的对象,使用的是不同的连接
不会产出影响
------解决方案--------------------
发送不会,出口是不同的。但是如果对面服务器写的太烂,只允许一个线程来处理一个端口上的一个链接。那也没有办法了。