ConcurrentHashMap返回一个弱一致的迭代器,为什么我们应该使用它呢?

Hos*_*ein 9 java concurrency concurrenthashmap concurrent-programming

我正在阅读Java Concurrecny这本书.在第85页的第5.2.1节中,它讨论了ConcurrentHashMap及其优点.然而,在一个部分中,书籍声称

ConcurrentHashMap返回的迭代器非常一致.这意味着这个迭代器可以容忍并发修改,遍历构造迭代器时存在的元素,并且可以(但不保证)反映迭代器构造后对集合的修改.

从我理解为什么并发程序中的整个同步点是允许线程以一致的方式访问共享资源,而ConcurrentHashMap并没有真正实现这一点.那么为什么要使用呢?

Jon*_*eet 17

关键是在不需要时避免同步.如果你不介意看到在某些情况下,新的元素,而不是看到他们在其他国家,使用ConcurrentHashMap迭代器可以比显著便宜或者阻止其他线程添加项目,而你遍历采取一致的快照创建迭代器时.

所以是的,当你需要同步和一致的迭代器时,你需要一个替代方案 - 但是当你不需要时,你可以利用提供的更有效的迭代器ConcurrentHashMap.

  • @Maciej:`ConcurrentHashMap`是一个锁条带实现,默认并发级别是16. (3认同)