Задать вопрос
@vetalmatitskiy
testing engineer

Как правильно использовать immutable-объекты для многопоточных приложений?

Доброго дня, уважаемые гуру Java. Анализируя вопросы которые задают на собеседованиях пытаюсь более детально разобратся с темой immutable-объектов. К сожалению те ресурсы, которые предлагает гугль дают лишь очень общую информацию в стиле "immutable-объекты, это те объекты которые не могут быть изменены в программе. для того, чтобы объект был immutable используйте модификатор final". Как энциклопедические знания такое конечно можно сказать, на собеседовании, но думаю там хотят слышать понимание более глубоких принципов. кроме того, хочу написать мини-проект для лучшего понимания этого из наиболее понятного пока нашел лекцию https://youtu.be/z8bstpYRV9I там хотя бы на примере показывается как immutable связано с многопоточностью. и понятно, почему важно использовать immutable-объекты. к сожалению видео освещает не все моменты можете ли Вы пояснить на примерах или подсказать адекватные источники, где раскрыты рекомендации по использованию неизменяемых объектов в контексте многопоточности?
  • Вопрос задан
  • 603 просмотра
Подписаться 1 Оценить Комментировать
Ответ пользователя bromzh К ответам на вопрос (3)
@bromzh
Drugs-driven development
В первую очередь надо понимать и уметь работать с коллекциями в многопоточной среде. Модификатор final ещё не означает, что поле нельзя изменить. Он лишь указывает, что такому полю нельзя дважды присвоить значение через оператор =.
На тему коллекций в многопоточности есть вот это: www.youtube.com/watch?v=-yQeYo32Lt4

Ну а в целом, всё в принципе просто. В многопоточной среде появляется необходимость использовать некие общие данные. Первый вариант - это использовать синхронизации (семафоры, мьютексы и т.д.). Другой вариант - объявить, что все данные неизменяемые. Данные полям можно присвоить только 1 раз, все коллекции тоже неизменяемые. Тогда можно считывать их значения без использования синхронизаций (которые порой бывают сложными, да и лишняя память тратится) и прозрачно обрабатывать их в несколько потоков.
Ответ написан
Комментировать