Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Войти

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

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

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: concurrenthashmap, synchronization, performance

Чем ConcurrentHashMap отличается от синхронизированных коллекций? (блокировка сегментов)

Вопрос проверяет понимание различий между потокобезопасными коллекциями и их производительностью.

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

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

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

Сравнение подходов:

  1. Collections.synchronizedMap:

    • Все методы синхронизированы через одну блокировку.

    • Низкая производительность при высокой конкуренции.

  2. ConcurrentHashMap:

    • Данные разделены на сегменты (бакеты).

    • Блокируется только один сегмент при изменении.

    • Чтение без блокировок (если нет изменений).

Пример производительности:

Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
Map<String, String> concurrentMap = new ConcurrentHashMap<>();

// 10 потоков пишут в syncMap: последовательно
// 10 потоков пишут в concurrentMap: параллельно (для разных сегментов)

Когда использовать:

  • ConcurrentHashMap: для высоконагруженных многопоточных приложений.

  • synchronizedMap: если требуется простая потокобезопасность без высокой конкуренции.

Уровень

  • Рейтинг:

    1

  • Сложность:

    5

Навыки

  • Java

    Java

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

#concurrenthashmap

#synchronization

#performance

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