小编典典

ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?

all

我有一个 Map 将由多个线程同时修改。

Java API 中似乎存在三种不同的同步 Map 实现:

  • Hashtable
  • Collections.synchronizedMap(Map)
  • ConcurrentHashMap

据我了解,Hashtable是一个旧的实现(扩展过时的Dictionary类),后来经过调整以适应Map接口。虽然它
同步的,但它似乎存在严重的可伸缩性问题,并且不鼓励用于新项目。

但是另外两个呢?Collections.synchronizedMap(Map)和s返回的Maps有什么区别ConcurrentHashMap?哪一种适合哪一种情况?


阅读 136

收藏
2022-03-04

共1个答案

小编典典

根据您的需要,使用ConcurrentHashMap. 它允许从多个线程同时修改 Map
而无需阻塞它们。Collections.synchronizedMap(map)创建一个会降低性能的阻塞 Map,尽管可以确保一致性(如果使用得当)。

如果您需要确保数据一致性,请使用第二个选项,并且每个线程都需要拥有最新的地图视图。如果性能很关键,则使用第一个,并且每个线程只将数据插入到映射中,读取发生的频率较低。

2022-03-04