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

«Как вставить значение в HashMap без потерь при многопоточности» — вопрос из категории Многопоточность, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для потокобезопасной вставки в HashMap используйте ConcurrentHashMap или синхронизацию.

ConcurrentHashMap (рекомендуется):

val concurrentMap = ConcurrentHashMap<String, Int>()
concurrentMap.put("key", 42)  // потокобезопасно

Синхронизация (если ConcurrentHashMap не подходит):

val map = HashMap<String, Int>()
val lock = Any()

synchronized(lock) {
    map.put("key", 42)  // блокировка на время вставки
}

Важно:

  • ConcurrentHashMap эффективнее блокировок для частых операций.
  • Обычный HashMap + synchronized гарантирует безопасность, но снижает производительность.