Я проходил через ConcurrentHashMap
и this related tutorial и имел некоторые вопросы.Что касается внутренней работы параллельного hashmap
В статье было упоминание, что
ConcurrentHashMap
позволяет нескольким читателям читать одновременно без блокировки. Это достигается путем разбиения карты на разные части на основе уровня параллелизма и блокировки только части Карты во время обновлений. Уровень параллелизма по умолчанию - 16, и, соответственно, карта разделена на 16 частей, и каждая часть управляется с помощью другой блокировки. Это означает, что 16 потоков могут работать на карте одновременно, пока они не будут работать на разных частях Карты. Это делаетConcurrentHashMap
высокой производительностью, несмотря на то, что она не повреждена. Хотя, он приходит с оговоркой: Поскольку обновление операции, какput()
,remove()
,putAll()
илиclear()
не синхронизированы, одновременно поиска может не отражать самых последних изменений на картеЕще один момент, также упоминается в статье: Другой важный момент для запоминания - итерация над CHM, Iterator, возвращаемая
keySet
, слабо согласованы и отражены в состоянииConcurrentHashMap
и могут не отражать в последнее время изменения..
Я не понял пункты, выделенные жирным шрифтом, не могли бы вы предоставить дополнительную информацию или показать мне в простой программе?
Это дает ответы на свой 1-й вопрос: http://stackoverflow.com/questions/14947723/is-concurrenthashmap-totally-safe/14947818#14947818 –