ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?
我有一个 Map 将由多个线程同时修改。
Java API 中似乎存在三种不同的同步 Map 实现:
Hashtable
Collections.synchronizedMap(Map)
ConcurrentHashMap
据我了解,Hashtable
是一个旧的实现(扩展过时的Dictionary
类),后来经过调整以适应Map
接口。虽然它 是
同步的,但它似乎存在严重的可伸缩性问题,并且不鼓励用于新项目。
但是另外两个呢?Collections.synchronizedMap(Map)
和s返回的Maps有什么区别ConcurrentHashMap
?哪一种适合哪一种情况?
-
根据您的需要,使用
ConcurrentHashMap
. 它允许从多个线程同时修改 Map
而无需阻塞它们。Collections.synchronizedMap(map)
创建一个会降低性能的阻塞 Map,尽管可以确保一致性(如果使用得当)。如果您需要确保数据一致性,请使用第二个选项,并且每个线程都需要拥有最新的地图视图。如果性能很关键,则使用第一个,并且每个线程只将数据插入到映射中,读取发生的频率较低。
-
ConcurrentHashMap和Collections.synchronizedMap(Map)有什么区别?
2021-02-02 关注 0 浏览117 1答案
-
Hashtable和Collections.synchronizedMap(HashMap)之间的区别
2021-01-30 关注 0 浏览96 1答案
-
Collection 和 Collections 有什么区别?
2020-01-08 关注 0 浏览1109 1答案
-
Collections.emptyList()和Collections.EMPTY_LIST有什么区别
2021-01-30 关注 0 浏览77 1答案
-
Collection和Collections有什么区别
2021-12-25 关注 0 浏览75 1答案
-
Collection 和 Collections 有什么区别?
2021-09-18 关注 0 浏览119 1答案
-
Collection 和 Collections 有什么区别?
2021-09-17 关注 0 浏览177 1答案
-
map里面[]和 at 有什么区别
2022-09-21 关注 0 浏览14 0答案
-
Map和WeakMap有什么区别?
2021-01-11 关注 0 浏览224 0答案
-
map和forEach有什么区别?
2021-01-11 关注 0 浏览200 0答案