我有一个 Map 将由多个线程同时修改。
Java API 中似乎存在三种不同的同步 Map 实现:
Hashtable
Collections.synchronizedMap(Map)
ConcurrentHashMap
据我了解,Hashtable是一个旧的实现(扩展过时的Dictionary类),后来经过调整以适应Map接口。虽然它 是 同步的,但它似乎存在严重的可伸缩性问题,并且不鼓励用于新项目。
Dictionary
Map
但是另外两个呢?Collections.synchronizedMap(Map)和s返回的Maps有什么区别ConcurrentHashMap?哪一种适合哪一种情况?
根据您的需要,使用ConcurrentHashMap. 它允许从多个线程同时修改 Map 而无需阻塞它们。Collections.synchronizedMap(map)创建一个会降低性能的阻塞 Map,尽管可以确保一致性(如果使用得当)。
Collections.synchronizedMap(map)
如果您需要确保数据一致性,请使用第二个选项,并且每个线程都需要拥有最新的地图视图。如果性能很关键,则使用第一个,并且每个线程只将数据插入到映射中,读取发生的频率较低。