ConcurrentHashMap с ArrayList в качестве значения - PullRequest
5 голосов
/ 07 мая 2011

Мне нужно использовать HashMap вида <String, ArrayList<String>>, который будет доступ к нескольким различным темам. Из того, что мне удалось понять, ConcurrentHashMap является предпочтительным методом. Но возникнут ли какие-либо проблемы с тем фактом, что значением карты является ArrayList? Нужно ли определять значение как синхронизированный ArrayList или что-то в этом роде?

1 Ответ

12 голосов
/ 07 мая 2011

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

Редактировать - теперь, когда я думаю об этом, кроличья нора идет дальше.У вас есть ваша карта, у вас есть свой список, и у вас есть объекты в списке.Все, что могут изменить несколько потоков, должно быть потокобезопасным.Так что, если многие потоки могут изменять карту, списки и объекты в списках, то все они должны иметь средства защиты потоков.Если только экземпляры Map и List могут быть изменены одновременно, только они нуждаются в безопасности потоков.Если несколько потоков могут читать все, но не изменять, то вам не нужна безопасность потоков (думаю, кто-то исправит меня, если это не так)

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