Я полагаю, что они не используют блокировки чтения (полагаясь на поля volatile
, чтобы гарантировать, что чтения видят записи из других потоков) и внутренне разбиты на некоторое количество сегментов (в зависимости от ожидаемого уровня параллелизма), которыми являются записи распределены между, каждый из которых использует свой собственный замок записи отдельно от других. Таким образом, чтение никогда не блокируется, а запись - только блок, если им нужно выполнить запись в один и тот же сегмент одновременно. Я не эксперт в этом, хотя.
Что касается гарантий, я не уверен, что вы спрашиваете. ConcurrentMap
указывает гарантию целостности памяти:
Эффекты согласованности памяти: Как и в случае других одновременных коллекций, действия в потоке перед помещением объекта в ConcurrentMap
в качестве ключа или значения происходят до действия после доступа или удаления этого объекта. объект из ConcurrentMap
в другом потоке.