Встречается на 2% собеседований по Java

Какие механизмы синхронизации используются в ConcurrentHashMap

ConcurrentHashMap использует несколько механизмов для обеспечения потокобезопасности:

  1. Сегментирование (bucket-level locking) - карта делится на сегменты (16 по умолчанию), блокировка применяется только к конкретному сегменту при изменении. Это позволяет нескольким потокам работать с разными сегментами одновременно.
  1. CAS (Compare-And-Swap) операции - для атомарных операций в Java 8+ используются оптимистичные блокировки через Unsafe.compareAndSwap.

  2. Synchronized блоки - для модификации конкретных бакетов используются тонкие блокировки.

Пример изменения в Java 8:

java
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.compute("key", (k, v) -> v == null ? 1 : v + 1); // атомарное обновление
  1. Неблокирующие операции - методы типа get() вообще не используют блокировки, что обеспечивает высокую производительность при чтении.

  2. Копирование при изменении - при ресайзинге создаются новые узлы вместо модификации старых.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы