我读了一篇关于线程安全地图的文章,得到了一个问题。Collections.synchronizedMap()代理底层映射,在每个方法上添加synchronized块。另一方面,ConcurrentHashMap并没有在读/写操作上锁定整个映射。这意味着多线程系统中的所有操作都更快。
那么,现在使用synchronizedMap()有什么好处呢?我看到了唯一的:
ConcurrentHashMap)开始使用。当synchronizedMap()更好的时候,还有其他的情况吗?
发布于 2017-03-30 09:50:19
Collections.synchronizedMap(map)和ConcurrentHashMap都有优点和缺点。
当您需要数据一致性时,synchronizedMap非常有用。每个访问线程都有一个映射的更新视图,这个视图是通过阻塞映射来实现的,这反过来降低了它的性能。
当您需要频繁地修改ConcurrentHashMap时,map非常有用。由于它可以对map进行分段/分区,所以有几个线程同时在上面工作。但是,访问线程可能没有map的更新视图。另一个优势是它是fail-safe。ConcurrentHashMap 不允许空键或值.
ConcurrentHashMap**if 使用的性能是非常关心的,那么数据的一致性。**
发布于 2017-03-30 09:22:48
不怎么有意思。我能想到的唯一其他情况是很容易地使自定义映射实现线程安全。
发布于 2017-03-30 09:33:29
来自ConcurrentHashMap文档:
"...there不支持以阻止所有访问的方式锁定整个表“
当迭代ConcurrentHashMap元素时,您可能会看到其他线程同时进行的更新。如果您想防止这样的更新,可以使用Collections.synchronizedMap()代替,并将迭代逻辑放在同步(Map)块中。
https://stackoverflow.com/questions/43113397
复制相似问题