Безопасно ли получать значения из java.util.HashMap из нескольких потоков (без изменений)? - PullRequest
126 голосов
/ 19 сентября 2008

Существует случай, когда карта будет построена, и после ее инициализации она никогда не будет изменена снова. Однако к нему можно будет получить доступ (только через get (key)) из нескольких потоков. Безопасно ли использовать java.util.HashMap таким образом?

(В настоящее время я рад, что использую java.util.concurrent.ConcurrentHashMap, и у меня нет определенной необходимости улучшать производительность, но мне просто любопытно, достаточно ли простого HashMap. Следовательно, этот вопрос не «Какой из них мне следует использовать?» И это не вопрос производительности. Скорее, вопрос «Будет ли это безопасно?»)

Ответы [ 11 ]

0 голосов
/ 19 сентября 2008

http://www.docjar.com/html/api/java/util/HashMap.java.html

вот источник для HashMap. Как вы можете сказать, там нет абсолютно никакого кода блокировки / мьютекса.

Это означает, что хотя чтение из HashMap в многопоточном режиме вполне нормально, я бы определенно использовал ConcurrentHashMap, если было несколько записей.

Интересно то, что в .NET HashTable и Dictionary встроен код синхронизации.

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