JDK 为 Set
和 List
提供了 CopyOnWrite*
实现,但对于 Map
和 I' 则没有我经常感叹这个事实。我知道还有其他的集合实现有它们,但如果一个作为标准发布就好了。这似乎是一个明显的遗漏,我想知道是否有充分的理由。有人知道为什么会忽略它吗?
最佳答案
我想这取决于您的用例,但是当您已经拥有 ConcurrentHashMap 时,为什么还需要 CopyOnWriteMap? ?
对于一个有很多读者但只有一个或几个更新的简单查找表来说,这是一个很好的选择。
与写集合时的副本相比:
读取并发:
等于写集合时的副本。多个读取器可以以无锁方式同时从 map 中检索元素。
写并发:
比基本上序列化更新(一次更新一个)的写入集合上的副本具有更好的并发性。使用并发 HashMap ,您很有可能同时进行多个更新。如果您的哈希键分布均匀。
如果您确实想要在 write map 上获得副本的效果,您始终可以初始化并发级别为 1 的 ConcurrentHashMap。
关于java - 为什么 Java 不附带 CopyOnWriteMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4241477/