关于java:何时使用ConcurrentHashMap

When to use ConcurrentHashMap

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What’s the difference between ConcurrentHashMap and Collections.synchronizedMap(Map)?

我在读hashmap、collenctions.synchonizedmap和concurrenthashmap之间的区别。我的理解是collections.synchronizedMap对整个集合应用了锁,因此会导致性能开销。但Concurrenthashmap不使用同步。它使用段来实现结果,因此它提供了与hashmap类似的性能。

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


ConcurrentHashMap doesn't use synchronization. It uses segments to achieve the results

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

can I use ConcurrentHashMap everywhere even if there may not be multiple threads accessing it?

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