【发布时间】:2017-08-24 02:45:33
【问题描述】:
我阅读了一篇关于线程安全映射的文章并提出了一个问题。 Collections.synchronizedMap() 代理底层映射,在每个方法上添加 synchronized 块。另一方面,ConcurrentHashMap 不会在读/写操作上锁定整个地图。这意味着多线程系统中的所有操作都更快。
那么现在使用synchronizedMap() 有什么好处呢?我只看到了:
- 它从 java 1.2 开始可用(与 java 1.5 相比
ConcurrentHashMap) - 可以存储可以为空的值(如果底层地图可以做到的话)
还有其他情况synchronizedMap()更好吗?
【问题讨论】:
-
如果要同步的地图不是
HashMap? -
CHM 允许更高的并行化和可扩展性,但增加的复杂性会消耗额外的内存和性能,因此在低争用环境中可能不值得。此外,
synchronizedMap()可以包装各种地图类型,例如EnumMap或LinkedHashMap。
标签: java multithreading java.util.concurrent