何时使用ConcurrentHashMap

meh*_*hta 5 java concurrent-collections

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

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

如果我的理解是正确的,请建议.如果是这种情况,即使可能没有多个线程访问它,我可以在任何地方使用ConcurrentHashMap吗?

Sco*_*ion 7

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

ConcurrentHashMap在段级别同步,允许像putIfAbsent这样的原子操作或用旧值替换旧值.优点是通过一种称为锁定条带的技术得出的.

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

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