Разница между блокировкой уровня корзины и блокировкой уровня сегмента в ConcurrentHashMap? - PullRequest
1 голос
/ 10 июня 2019

Я прошел по ссылке ниже и некоторым онлайн-видеоурокам, но не смог найти точную разницу между блокировкой уровня корзины и блокировкой уровня сегмента в ConcurrentHashMap.

ConcurrentHashMap

1 Ответ

1 голос
/ 10 июня 2019

В Java 8 ConcurrentHashMap изменена логика для использования блокировок уровня сегмента вместо блокировок уровня сегмента.

В чем разница?

В Java 7Карта была разделена между сегментами, каждый из которых сам по себе является одновременно читаемой хэш-таблицей.Каждый сегмент содержит некоторое количество сегментов внутри.

Сам блок является списком / массивом пар ключ-значение.

Количество потоков, работающих с картой параллельно, было ограничено количествомсегменты.

В Java 8 уровень блокировки был перемещен на уровень сегмента, в то время как сегменты были удалены (это все еще в коде, но без использования).

Так, в основном, в Java 7вставка блокировала несколько сегментов, в Java 8 - только один.

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

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