可能重复: What’s the difference between ConcurrentHashMap and Collections.synchronizedMap(Map)?
我在读HashMap,Collenctions.synchonizedMap和ConcurrentHashMap的不同之处。我的理解是,Collections.synchronizedMap对整个集合应用了锁,从而导致性能开销。但是ConcurrentHashMap不使用同步。它使用片段来实现结果,因此它提供了类似于HashMap的性能。
请建议我的理解是否正确。同样,如果是这样的话,我可以在任何地方使用ConcurrentHashMap,即使可能没有多个线程访问它?
发布于 2013-01-09 05:52:54
ConcurrentHashMap不使用同步。它使用分段来实现结果。
ConcurrentHashMap在段级同步,允许像putIfAbsent这样的原子操作,或者用新值替换旧值。这一优势来自于一种叫做锁条纹的技术。
我可以在任何地方使用ConcurrentHashMap,即使可能没有多线程访问它?
不,我没有理由这么做。撇开性能不谈,数据结构的选择也是关于如何使用代码的文档(HashMap->单线程)。只有在所使用的类是线程安全的情况下才使用ConcurrentHashMap;否则,在非线程安全类中使用线程安全数据结构会增加下一个查看代码的人的困惑。
https://stackoverflow.com/questions/14228974
复制相似问题