目前我正在阅读"实践中的Java并发",其中包含以下句子:
由于访问无状态对象的线程的操作不会影响其他线程上的操作的正确性,因此无状态对象是线程安全的.
那么,什么是无状态对象?
Boz*_*zho 84
无状态对象是没有实例字段(实例变量)的类的实例.该类可能有字段,但它们是编译时常量(静态最终).
一个非常相关的术语是不可改变的.不可变对象可能具有状态,但在调用方法时它不会更改(方法调用不会为字段分配新值).这些对象也是线程安全的.
Mal*_*olm 60
如果对象没有任何实例字段,则它是无状态的.如果它有一些字段,它也可以是无状态的,但它们的值是已知的并且不会改变.
这是一个无状态对象:
class Stateless {
void test() {
System.out.println("Test!");
}
}
Run Code Online (Sandbox Code Playgroud)
这也是一个无状态的对象:
class Stateless {
//No static modifier because we're talking about the object itself
final String TEST = "Test!";
void test() {
System.out.println(TEST);
}
}
Run Code Online (Sandbox Code Playgroud)
这个对象有状态,所以它不是无状态的.但是,它的状态只设置一次,并且以后不会改变,这种类型的对象称为不可变:
class Immutable {
final String testString;
Immutable(String testString) {
this.testString = testString;
}
void test() {
System.out.println(testString);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
简单来说,对象的状态意味着该对象中内部变量的值。
有状态 - 对象的状态可以更改,意味着可以更改该对象的成员变量的内部值
如何改变数值?
通过设定值。
什么时候可以设置这个值?当变量不是最终变量时..
因此,要使类成为无状态,请将变量设置为最终变量,以便该变量的值既不能在 setter 中也不能在其他方法中更改。它只能用于计算。
归档时间: |
|
查看次数: |
39272 次 |
最近记录: |