6

可能重复:
ConcurrentHashMap 和 Collections.synchronizedMap(Map) 有什么区别?

我正在阅读 HashMap、Collenctions.synchonizedMap 和 ConcurrentHashMap 之间的差异。我的理解是 Collections.synchronizedMap 对整个集合应用了锁,因此会产生性能开销。但是 ConcurrentHashMap 不使用同步。它使用段来实现结果,因此它提供了与 HashMap 相似的性能。

请提出我的理解是否正确。此外,如果是这种情况,即使可能没有多个线程访问它,我是否可以在任何地方使用 ConcurrentHashMap ?

4

1 回答 1

9

ConcurrentHashMap 不使用同步。它使用段来实现结果

ConcurrentHashMap 在段级别同步,允许原子操作,如 putIfAbsent 或用新值替换旧值。这种优势来自一种称为锁条带化的技术。

即使可能没有多个线程访问它,我可以在任何地方使用 ConcurrentHashMap 吗?

不,我没有理由这样做。撇开性能不谈,数据结构的选择还可以作为有关如何使用代码的文档(HashMap--> 单线程)。仅当使用它的类是线程安全的时才使用 ConcurrentHashMap;否则,在非线程安全类中使用线程安全数据结构会增加下一个查看代码的人的困惑。

于 2013-01-09T05:52:54.920 回答