Подтвердить что ты не робот

Что такое объект без состояния в Java?

В настоящее время я читаю "Java concurrency на практике", в котором содержится это предложение:

Так как действие потока, обращающегося к объекту без состояния, не может повлиять на правильность операций над другими потоками, объекты без состояния не будут потокобезопасными.

Итак, что такое объект без гражданства?

4b9b3361

Ответ 1

Объект stateless - это экземпляр класса без полей экземпляра (переменные экземпляра). Класс может иметь поля, но они являются константами времени компиляции (статические окончательные).

Очень родственный термин неизменен. Неизменяемые объекты могут иметь состояние, но при вызове метода он не изменяется (вызовы методов не присваивают поля новым значениям). Эти объекты также являются потокобезопасными.

Ответ 2

Если объект не имеет полей экземпляра, он безстоящий. Также он может быть без гражданства, если он имеет некоторые поля, но их значения известны и не меняются.

Это объект без состояния:

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

Это также объект без состояния:

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

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

Этот объект имеет состояние, поэтому он не является апатридом. Однако он имеет свое состояние только один раз, и он не изменяется позже, этот тип объектов называется неизменным:

class Immutable {
    final String testString;

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

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

Ответ 3

Объект без состояния, например переменные экземпляра, которые могут меняться и меняться в зависимости от того, что уже произошло с объектом

Ответ 4

Объектом без состояния является объект, который не имеет никакого внутреннего состояния (внутренняя переменная)

Ответ 5

Концепция объекта без гражданства тесно связана с концепцией побочных эффектов. Вскоре это объект, у которого нет полей под которым могут быть разные значения, в зависимости от различного порядка вызовов методов.

Ответ 6

Просто разъяснение. Вы можете рассматривать свой класс как апатрид в том виде, который указан ранее, даже если он имеет переменную экземпляра, поскольку эта переменная является окончательной и неизменной.

Если переменная экземпляра просто окончательна, но изменена, список строк в примере, да, ссылка на переменную не может быть изменена, но содержимое списка и, следовательно, состояние класса могут быть изменены.

Ответ 7

Объекты, которые не имеют абсолютно никакого состояния, тогда нет проблем с их повторным использованием на данный момент возникает вопрос: если у них нет абсолютно никакого состояния, почему бы не сделать все методы статичными и никогда не создавать их вообще?

Ответ 8

Если вы не можете изменить какой-либо параметр или значение и т.д. объекта, после его создания, то этот объект является потокобезопасным.