最近在学习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是不同的对象,使用的是不同的连接
不会产出影响
------解决方案--------------------
发送不会,出口是不同的。但是如果对面服务器写的太烂,只允许一个线程来处理一个端口上的一个链接。那也没有办法了。