Вопрос проверяет понимание различий между потокобезопасными коллекциями и их производительностью.
ConcurrentHashMap использует блокировку сегментов (только части данных), тогда как синхронизированные коллекции (Collections.synchronizedMap) блокируют весь объект, что снижает производительность.
Сравнение подходов:
Collections.synchronizedMap:
Все методы синхронизированы через одну блокировку.
Низкая производительность при высокой конкуренции.
ConcurrentHashMap:
Данные разделены на сегменты (бакеты).
Блокируется только один сегмент при изменении.
Чтение без блокировок (если нет изменений).
Пример производительности:
Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
Map<String, String> concurrentMap = new ConcurrentHashMap<>();
// 10 потоков пишут в syncMap: последовательно
// 10 потоков пишут в concurrentMap: параллельно (для разных сегментов)Когда использовать:
ConcurrentHashMap: для высоконагруженных многопоточных приложений.
synchronizedMap: если требуется простая потокобезопасность без высокой конкуренции.