【发布时间】:2016-02-12 10:56:09
【问题描述】:
如果我创建一个只有方法而没有变量的类,并且每个方法都有自己的局部变量,那么该类是否是线程安全的?例如。
public class Client {
public String xyz(final String inputXML) {
DataInputStream dis = null;
DataOutputStream dout = null;
Socket clientSocket = null;
//do some processing
}
public String abc(final String inputXML) {
DataInputStream dis = null;
DataOutputStream dout = null;
Socket clientSocket = null;
//do some processing
}
}
现在如果我启动这个客户端的多个线程,那么这个类会是线程安全的吗?
【问题讨论】:
-
它是线程安全的,但是如果您尝试从多个线程打开同一个套接字,您仍然会遇到并发问题。
-
这不是同一个 Socket,因为对这些方法的不同调用之间没有共享数据。如果在每个线程中创建一个新的 Socket,它将在客户端的不同端口上工作,因此不会在套接字连接之间混合数据。套接字由服务器的 ip 端口和客户端的端口 ip 标识。这种情况下客户端的端口会发生变化
标签: java multithreading thread-safety