Какая альтернатива Collections.unmodifiable map для одновременного доступа к неизменяемой карте - PullRequest
0 голосов
/ 18 июня 2020

После прекращения поддержки edu.emory.mathcs.backport.java.util.Collections.unmodifiableMap, какова альтернатива для одновременного доступа к UnmodifiableMaps?

Ответы [ 2 ]

4 голосов
/ 18 июня 2020

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

В этом весь смысл неизменности.

0 голосов
/ 18 июня 2020

Collections.unmodifiableMap возвращает вид на исходную карту, а не копию.

java.util.Collections.unmodifiableMap не является устаревшим.

Что касается одновременного доступа к карте, у вас нет проблем, если вы используете ссылку, возвращаемую этим методом. Но будьте осторожны: возвращенная ссылка - это вид на исходную карту. Поэтому, если исходная карта изменяется, пока вы используете неизменяемое представление, у вас будут проблемы с параллелизмом.

Map.copyOf

Вместо этого я предлагаю в Java 10 и более поздних версиях вместо этого позвонить Map.copyOf. Этот метод создает фактическую копию карты, а не вид. Так что результат не имеет отношения к оригиналу. Добавление или удаление записей в исходной карте не влияет на неизменяемую карту, возвращаемую этим методом.

Map< DayOfWeek , Person > map = new HashMap<>() ;
…
Map< DayOfWeek , Person > mapUnmod = Map.copyOf( fix 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...