Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: concurrency, map, collection, performance

Параллелизм в ConcurrentHashMap vs Collections.synchronizedMap

Анализирует механизмы обеспечения потокобезопасности в коллекциях.

Короткий ответ

ConcurrentHashMap делит данные на сегменты (бакеты), позволяя параллельно писать в разные сегменты. Collections.synchronizedMap блокирует всю коллекцию на каждую операцию. Это делает ConcurrentHashMap быстрее в многопоточной среде.

Длинный ответ

Различия:

  1. Collections.synchronizedMap:

    • Обёртка над обычной HashMap.

    • Все методы синхронизированы через монитор:

      Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
      // Любая операция блокирует всю коллекцию
  2. ConcurrentHashMap:

    • Использует сегментирование (до Java 8) или CAS + synchronized на уровне бакета (Java 8+).

    • Потоки могут работать с разными бакетами одновременно:

      ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
      concurrentMap.put("key", 1); // Блокируется только бакет для "key"

Преимущества ConcurrentHashMap:

  • Высокая пропускная способность при множестве writer-потоков.

  • Методы для атомарных операций: compute(), merge().

Недостатки:

  • Нет гарантии консистентности при итерации (может показывать устаревшие данные).

Вывод: Всегда выбирайте ConcurrentHashMap для многопоточных сценариев с частыми записями.

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#concurrency

#map

#collection

#performance

Подпишись на Java Developer в телеграм