我经常听到"无国籍"和"不可改变"这个词.例如,HTTP是无状态协议,String对象是不可变对象.但我很难掌握两者之间的差异.当我创建无状态对象时,它不会在内部存储任何"状态"数据.如果我创建一个Immutable对象,它意味着它永远不会改变.
这是不是意味着同样的事情?
由于不可变对象不会改变,因此根据定义它不能具有状态.它永远是它.如果一个对象没有状态,则不能进行变异(根据定义).因此,并非所有无状态对象都是不可变和不可变对象无状态的吗?
什么可以是可变无状态对象或不可变状态对象的示例?
如果我创建一个仅包含方法而没有变量的类,并且每个方法都具有自己的局部变量,那么该类是否是线程安全的?例如
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
}
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我启动此Client的多个线程,那么该类将是线程安全的吗?