首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果有synchronizedMap(),为什么需要ConcurrentHashMap?

如果有synchronizedMap(),为什么需要ConcurrentHashMap?
EN

Stack Overflow用户
提问于 2017-03-30 09:14:16
回答 4查看 2.6K关注 0票数 4

我读了一篇关于线程安全地图的文章,得到了一个问题。Collections.synchronizedMap()代理底层映射,在每个方法上添加synchronized块。另一方面,ConcurrentHashMap并没有在读/写操作上锁定整个映射。这意味着多线程系统中的所有操作都更快。

那么,现在使用synchronizedMap()有什么好处呢?我看到了唯一的:

  1. 它可以从java1.2(vsjava1.5用于ConcurrentHashMap)开始使用。
  2. 可以存储可空值(如果基础映射可以这样做的话)

synchronizedMap()更好的时候,还有其他的情况吗?

EN

回答 4

Stack Overflow用户

发布于 2017-03-30 09:50:19

Collections.synchronizedMap(map)ConcurrentHashMap都有优点和缺点。

当您需要数据一致性时,synchronizedMap非常有用。每个访问线程都有一个映射的更新视图,这个视图是通过阻塞映射来实现的,这反过来降低了它的性能。

当您需要频繁地修改ConcurrentHashMap时,map非常有用。由于它可以对map进行分段/分区,所以有几个线程同时在上面工作。但是,访问线程可能没有map的更新视图。另一个优势是它是fail-safeConcurrentHashMap 不允许空键或值.

ConcurrentHashMap**if 使用的性能是非常关心的,那么数据的一致性。**

票数 2
EN

Stack Overflow用户

发布于 2017-03-30 09:22:48

不怎么有意思。我能想到的唯一其他情况是很容易地使自定义映射实现线程安全。

票数 1
EN

Stack Overflow用户

发布于 2017-03-30 09:33:29

来自ConcurrentHashMap文档:

"...there不支持以阻止所有访问的方式锁定整个表“

当迭代ConcurrentHashMap元素时,您可能会看到其他线程同时进行的更新。如果您想防止这样的更新,可以使用Collections.synchronizedMap()代替,并将迭代逻辑放在同步(Map)块中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43113397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档