Встречается на 2% собеседований по Java

В чем разница между СoncurrentHashMap и Hashtable

ConcurrentHashMap и Hashtable оба потокобезопасны, но есть ключевые различия:

  1. Блокировки

    • Hashtable блокирует всю таблицу на время операций (высокая конкуренция).
    • ConcurrentHashMap использует сегментированные блокировки (блокируется только сегмент), что повышает производительность.
  2. Null-значения

    • Hashtable запрещает null как ключи и значения.
    • ConcurrentHashMap также запрещает null (чтобы избежать неоднозначности в многопоточной среде).
  1. Итераторы
    • Hashtable выбросит ConcurrentModificationException при изменении во время итерации.
    • ConcurrentHashMap предоставляет слабо согласованные итераторы (не гарантируют актуальность данных, но не падают).

Пример:

java
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("key", 1); // Потокобезопасно, блокируется только сегмент

Hashtable<String, Integer> table = new Hashtable<>();
table.put("key", 1); // Потокобезопасно, но блокируется вся таблица

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

  • ConcurrentHashMap — для высоконагруженных многопоточных сценариев.
  • Hashtable — устаревший, лучше использовать ConcurrentHashMap или Collections.synchronizedMap().
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы