В целом, потому что HashTable
и ConcurrentHashMap
не имеют точно такого же поведения и, следовательно, фактических результатов, касающихся параллелизма.Для операций поиска тот факт, что ConcurrentHashMap
не блокирует всю таблицу, делает ConcurrentHashMap
, что может не отражать последнее обновленное значение для ключа, так как get()
может перекрываться с put()
/ remove()
операциями:
Операции получения (включая get) обычно не блокируются, поэтому могут перекрываться с операциями обновления (включая put и remove).Извлечения отражают результаты самых последних завершенных операций обновления, сохраняющих их начало
И когда эта задержка не имеет значения во многих случаях использования, а также вы можете справиться с этим с помощью явных синхронизированных операторов, вы предпочитаетеиспользовать ConcurrentHashMap
сверх HashTable
, поскольку это улучшает общую производительность Map
для одновременного доступа.