Что такое неизменяемые объекты? - PullRequest
6 голосов
/ 19 января 2010

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

спасибо

Ответы [ 3 ]

10 голосов
/ 19 января 2010

Неизменяемые объекты - это объекты, которые нельзя изменить.Если объект не может быть изменен, то не стоит беспокоиться, что конкурирующий поток изменит состояние объекта «за спиной» исполняющего потока, и поэтому неизменяемые объекты не нужно защищать с помощью синхронизации или некоторой другой техники.1001 *

5 голосов
/ 19 января 2010

Потокобезопасные объекты - это объекты, к которым одновременно могут обращаться несколько потоков. Их реализация гарантирует (например, с помощью блокировок / синхронизированных методов / ...), что они не попадут в недопустимое состояние. Кроме того, не должно быть потери данных.

Неизменяемые объекты не могут быть изменены после их создания. Итак: Да, они какие-то лица без гражданства.

Поскольку неизменяемые объекты не могут быть изменены, блокировка не требуется - доступ для чтения к объектам всегда безопасен для потоков (когда не изменяются переменные). Поэтому настоящие неизменяемые объекты всегда безопасны для потоков.

4 голосов
/ 19 января 2010

Неизменяемый объект: объект, который не меняет своего внутреннего состояния.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...