我刚刚阅读了"清洁代码"一书,并发现了这一说法:
当Java年轻的时候,Doug Lea写了一本开创性的书[8] Java中的Concurrent Programming.随着这本书,他开发了几个线程安全的集合,后来成为了JDK的
java.util.concurrent一部分.该软件包中的集合对于多线程情况是安全的,并且它们表现良好.事实上,ConcurrentHashMap在 几乎所有情况下, 实现都比HashMap表现更好.它还允许同时并发读取和写入,并且它具有支持常见复合操作的方法,否则这些操作不是线程安全的.如果Java 5是部署环境,请从ConcurrentHashMap
请注意,在上面的引用中,我使用了"[n]",其中n是某个数字,表示作者提供引用的地方,正如您所看到的,他没有为粗体部分提供任何参考.
并不是说我不相信这个陈述,但我很想知道这个陈述的支持证据.因此,没有人知道,显示了两种性能统计信息的任何资源ConcurrentHashMap和HashMap?或者任何人都可以向我解释为什么ConcurrentHashMap比HashMap更快?
我可能会在休息时看看ConcurrentHashMap在工作中的实现,但是现在我想听听其他SOers的答案.
我正在学习一个教程,它基本上解释了在多线程环境中调整Hashmap大小时发生的竞争条件的原因:
在Java中,如果两个线程同时发现现在HashMap需要调整大小并且它们都尝试调整大小.在Java中的HashMap的调整过程中,存储在链表斗元素迁移到新的水桶中得到逆转,从而因为Java的HashMap不附加在尾部的新元素,而不是它在头部添加新元素避免尾部穿越.如果发生竞争条件,那么最终会出现无限循环
阅读本文后我有两个问题:
请帮我澄清一下,非常感谢!
我真的很困惑这两个集合在多线程环境中的表现.
哈希表是同步的,这意味着没有2个线程同时更新它的值吗?