Get () в ConcurrentHashMap против get () в HashTable - PullRequest
0 голосов
/ 16 сентября 2018

Я читал, что метод ConcurrentHashMap get(), а также HashTable get() является поточно-ориентированным, хотя первый не использует синхронизированное ключевое слово.Почему при реализации метода HashTable get() требуется синхронизированное ключевое слово, чтобы сделать его поточно-ориентированным, но это не требуется в случае метода ConcurrentHashMap get().

1 Ответ

0 голосов
/ 16 сентября 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...