Подтвердить что ты не робот

ConcurrentHashMap и Hashtable в Java

В чем разница между ConcurrentHashMap и Hashtable в Java?

Что более эффективно для поточных приложений?

4b9b3361

Ответ 1

ConcurrentHashMap использует несколько ведер для хранения данных. Это позволяет избежать блокировки чтения и значительно повышает производительность по сравнению с HashTable. Оба являются потокобезопасными, но есть очевидные победы в производительности с ConcurrentHashMap.

Когда вы читаете с ConcurrentHashMap с помощью get(), нет никаких блокировок, в отличие от HashTable, для которых все операции просто синхронизируются. HashTable был выпущен в старых версиях Java, тогда как ConcurrentHashMap является Java + 5+.

HashMap - лучшее, что можно использовать в однопоточном приложении.

Ответ 2

ConcurrentHashMap и механизм блокировки Hashtable

  • Hashtable принадлежит структуре Collection; ConcurrentHashMap относится к структуре Executor.
  • Hashtable использует единую блокировку для целых данных. ConcurrentHashMap использует несколько блокировок на уровне сегмента (по умолчанию 16) вместо уровня объекта, т.е. всей Map.
  • Блокировка ConcurrentHashMap применяется только для обновлений. В случае поиска, он позволяет полностью совместить, результаты поиска отражают результаты последних завершенных операций обновления. Поэтому чтение может происходить очень быстро, в то время как записи выполняются с помощью блокировки.
  • ConcurrentHashMap не выдает ConcurrentModificationException если один поток пытается изменить его, а другой выполняет итерацию по нему и не допускает нулевые значения.
  • ConcurrentHashMap возвращает Iterator, который является отказоустойчивым (т.е. итератор сделает копию внутренней структуры данных) при одновременной модификации.
  • ConcurrentHashMap использует логику разбиения базы данных (Segment<K, V>[] segments) известен как уровень параллелизма, то есть делит данные на осколки (сегменты), чем ставит блокировки на каждый осколок (сегмент) вместо того, чтобы помещать единую блокировку для целого данные (Map). Значение по умолчанию - 16.

Чтобы лучше понять ConcurrentHashMap, посмотрите эту ссылку

Следующая аналогия помогает вам понять только концепцию (а не логику)

  • Предположим, что Hashtable и ConcurrentHashMap - это два типа домов.
  • Hashtable блокирует главную главную дверь.
  • ConcurrentHashMap блокирует конкретную дверь комнаты вместо главной двери.

Что более эффективно для резьбовых приложений?

ConcurrentHashMap более эффективен для поточных приложений.