Sobes.tech
Назад к вопросам
Senior
6

Расскажи про ConcurrentHashMap и отличие от Hashtable

Компании, где спрашивали
Octo

Ответ от нейросети

sobes.tech AI

ConcurrentHashMap и Hashtable — это потокобезопасные реализации отображения (Map) в Java, но между ними есть важные отличия:

  • Синхронизация:

    • Hashtable синхронизирует все методы, что приводит к блокировке всего объекта при каждой операции, снижая производительность при высокой конкуренции.
    • ConcurrentHashMap использует сегментированную (или в новых версиях — более тонкую) блокировку, позволяя нескольким потокам одновременно читать и писать в разные части карты без блокировки всей структуры.
  • Производительность: ConcurrentHashMap значительно быстрее в многопоточной среде благодаря более тонкой блокировке.

  • Null-значения: Hashtable не допускает null ключи и значения, ConcurrentHashMap тоже не допускает null ключи и значения (в отличие от HashMap).

  • Итераторы: Итераторы ConcurrentHashMap являются «weakly consistent» — они отражают состояние карты на момент создания и могут видеть некоторые изменения, сделанные после создания, без выбрасывания ConcurrentModificationException. Hashtable использует устаревшие итераторы, которые могут бросать исключения при изменении.

Пример использования ConcurrentHashMap:

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("key1", 1);
map.computeIfAbsent("key2", k -> 2);

Итог: ConcurrentHashMap предпочтительнее для современных многопоточных приложений из-за лучшей масштабируемости и производительности.