何时使用ConcurrentHashMap

时间:2013-01-09 05:45:58

标签: java concurrent-collections

  

可能重复:
  What’s the difference between ConcurrentHashMap and Collections.synchronizedMap(Map)?

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

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

1 个答案:

答案 0 :(得分:7)

  

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

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

  

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

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