What is Stateless Object in Java?

让人想犯罪 __ 提交于 2019-12-17 08:18:10

问题


Currently I'm reading "Java concurrency in practice", which contains this sentence:

Since the action of a thread accessing a stateless object can't affect the correctness of operations on other threads, stateless objects are thread-safe.

So, what is stateless object?


回答1:


Stateless object is an instance of a class without instance fields (instance variables). The class may have fields, but they are compile-time constants (static final).

A very much related term is immutable. Immutable objects may have state, but it does not change when a method is invoked (method invocations do not assign new values to fields). These objects are also thread-safe.




回答2:


If the object doesn't have any instance fields, it it stateless. Also it can be stateless if it has some fields, but their values are known and don't change.

This is a stateless object:

class Stateless {
    void test() {
        System.out.println("Test!");
    }
}

This is also a stateless object:

class Stateless {
    //No static modifier because we're talking about the object itself
    final String TEST = "Test!";

    void test() {
        System.out.println(TEST);
    }
}

This object has state, so it is not stateless. However, it has its state set only once, and it doesn't change later, this type of objects is called immutable:

class Immutable {
    final String testString;

    Immutable(String testString) {
        this.testString = testString;
    }

    void test() {
        System.out.println(testString);
    }
}



回答3:


The concept of stateless object is highly coupled with concept of side effects. Shortly, that is the object that has no fields underneath which could have different values, dependently on different order of method calls.




回答4:


An object without state, like instance variables that can change and vary depending on what has already happened to the object




回答5:


A stateless object is an object that doesn't have any internal state (internal variable)




回答6:


Just a clarification. You can consider your class as stateless in the way that is stated before, even when it has an instance variable as far as this variable is final AND immutable.

If the instance variable is just final but mutable, a List of Strings in example, yes the variable's reference can not be changed but the contents of the List and thus the state of the class can be changed.




回答7:


An objects that have absolutely no state then there is no problem with reusing them at this point the question is: if they have absolutely no state why not make all the methods static and never create one at all?




回答8:


If you can not change any parameter or value etc. of an object, after its creation, then that object is thread-safe.




回答9:


In simple terms state of object means value of internal variables in that object.

Stateful - state of object can be changed, means internal values off member variables of that object can be changed

How values can be changed?

By setting the value.

When can you set that value? When the variable is not final..

So, to make the class stateless, make the variable final, so that the value of that variable can't be changed neither in setter not in another method. It can be used only for computing.



来源:https://stackoverflow.com/questions/9735601/what-is-stateless-object-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!