У меня есть Карта, которая должна быть изменена несколькими потоками одновременно.
Кажется, что в Java API реализованы три разных синхронизированных реализации карты:
-
Hashtable
-
Collections.synchronizedMap(Map)
-
ConcurrentHashMap
Из того, что я понимаю, Hashtable
является старой реализацией (расширяющей устаревший класс Dictionary
), который был адаптирован позже, чтобы соответствовать интерфейсу Map
. Хотя он синхронизирован, он, похоже, имеет серьезные проблемы с масштабированием и не рекомендуется для новых проектов.
А как насчет двух других? Каковы различия между картами, возвращаемыми Collections.synchronizedMap(Map)
и ConcurrentHashMap
s? Какой из них подходит для этой ситуации?