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

Как работает HashMap с многопоточным программированием

HashMap не является потокобезопасной структурой. При одновременной модификации из нескольких потоков возможны race conditions, приводящие к потере данных или повреждению внутренней структуры (например, бесконечным циклам при рехешировании).

Проблемные сценарии:

  1. Два потока добавляют элементы - один может перезаписать другой
  2. Поток читает, а другой изменяет - может получить неконсистентные данные
java
// Небезопасно в многопоточной среде!
Map<String, Integer> unsafeMap = new HashMap<>();

Альтернативы:

  1. Collections.synchronizedMap() - обертка с synchronized
  2. ConcurrentHashMap - оптимальный вариант, использует сегментированные блокировки
  3. Hashtable - устаревший synchronized-аналог

Пример с ConcurrentHashMap:

java
ConcurrentHashMap<String, Integer> safeMap = new ConcurrentHashMap<>();
safeMap.put("key", 1); // Потокобезопасно

Для read-heavy workload можно также рассмотреть ConcurrentSkipListMap.

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

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

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

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