Использует ли Guava MapMaker и JDK ConcurrentMap блокировку чтения / записи? - PullRequest
1 голос
/ 29 июля 2011

Как я понимаю, обе карты предназначены для работы в многопоточной среде. Но я интересовался, какие функции они гарантируют (то есть доступность, согласованность).

1 Ответ

2 голосов
/ 29 июля 2011

Я полагаю, что они не используют блокировки чтения (полагаясь на поля volatile, чтобы гарантировать, что чтения видят записи из других потоков) и внутренне разбиты на некоторое количество сегментов (в зависимости от ожидаемого уровня параллелизма), которыми являются записи распределены между, каждый из которых использует свой собственный замок записи отдельно от других. Таким образом, чтение никогда не блокируется, а запись - только блок, если им нужно выполнить запись в один и тот же сегмент одновременно. Я не эксперт в этом, хотя.

Что касается гарантий, я не уверен, что вы спрашиваете. ConcurrentMap указывает гарантию целостности памяти:

Эффекты согласованности памяти: Как и в случае других одновременных коллекций, действия в потоке перед помещением объекта в ConcurrentMap в качестве ключа или значения происходят до действия после доступа или удаления этого объекта. объект из ConcurrentMap в другом потоке.

...