当前位置: 首页 > 面试题库 >

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

通宾白
2023-03-14
问题内容

我有一个地图,该地图将同时被多个线程修改。

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

  • Hashtable
  • Collections.synchronizedMap(Map)
  • ConcurrentHashMap

据我了解,这Hashtable是一个旧的实现(扩展了过时的Dictionary类),后来对其进行了修改以适合该Map接口。虽然它是同步的,但似乎存在严重的可伸缩性问题,因此不建议用于新项目。

但是其他两个呢?Collections.synchronizedMap(Map)ConcurrentHashMaps 返回的Map之间有什么区别?哪一种适合哪种情况?


问题答案:

为您的需要使用ConcurrentHashMap。它允许从多个线程并发修改Map,而无需阻止它们。Collections.synchronizedMap(map)创建一个阻塞映射,这会降低性能,尽管会确保一致性(如果使用正确)。

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



 类似资料:
  • 我知道什么是mapPartition转换和map。一些帖子声称mapPartition比map快。在什么情况下,我们使用mapPartition而不是map?mapPartition比map快吗?

  • 我正在使用webpack来配置源代码映射。我想知道有人能澄清“val”和“evar-source-map”之间的区别吗?我个人看不出有什么区别。

  • 本文向大家介绍请你说明一下Map和ConcurrentHashMap的区别?相关面试题,主要包含被问及请你说明一下Map和ConcurrentHashMap的区别?时的应答技巧和注意事项,需要的朋友参考一下 考点:集合 hashmap是线程不安全的,put时在多线程情况下,会形成环从而导致死循环。CoucurrentHashMap是线程安全的,采用分段锁机制,减少锁的粒度。

  • 问题内容: 他们读了一篇有趣的文章,声称这两个功能之间的区别是: 如果Map中尚未存在指定的Key,则两个函数都希望添加一个元素。 putIfAbsent添加具有指定值的元素,而computeIfAbsent添加具有使用键计算的值的元素。 http://www.buggybread.com/2014/10/java-8-difference-between- map.html 和 我们已经看到,p

  • 我对spark(和编程)很陌生,所以如果你能帮助我理解这两个输出之间的区别,那就太好了。

  • 问题内容: 据我所知,它会同步接口中的每个方法,同时返回一个包装器对象,该对象包含将调用委托给实际对象的同步方法(如果我错了,请纠正我)。 我有两个问题: 同步每个方法并具有包装器类有什么区别?有什么方案可以选择一个? 当我们这样做时会发生什么?这是否等同于简单地使用法线? 问题答案: 以下是我从一些(希望正确)的研究中得到的答案: 两者都提供相同程度的同步。如果要遍历Collections.sy