What is Stateless Object in Java?

2019-01-08 08:37发布

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?

8条回答
小情绪 Triste *
2楼-- · 2019-01-08 08:56

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.

查看更多
We Are One
3楼-- · 2019-01-08 09:00

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);
    }
}
查看更多
兄弟一词,经得起流年.
4楼-- · 2019-01-08 09:05

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?

查看更多
可以哭但决不认输i
5楼-- · 2019-01-08 09:07

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.

查看更多
贼婆χ
6楼-- · 2019-01-08 09:09

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

查看更多
beautiful°
7楼-- · 2019-01-08 09:12

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

查看更多
登录 后发表回答