【发布时间】:2015-04-27 20:36:02
【问题描述】:
所以刚刚通过 ConcurrentHashMap,它似乎是一个带有故障安全迭代器的线程安全实现。
故障安全迭代器的实现是使用数据结构的副本创建的,因此这可以防止引入并发修改的问题。但它会增加内存使用量的损失。
这个惩罚有多高?这是否总是等于数据结构的大小?
考虑到我计划在 ConcurrentHashMap 中保存大量上下文,如果我进行迭代,我的应用程序内存占用量突然翻倍确实是有害的。
另外,如果有“n”个线程同时迭代数据结构,内存损失是数据结构大小的“n”倍吗?
这似乎是为 Fail Safe 迭代器支付的代价高昂的代价。如果惩罚超出了这个顺序,我可以通过将故障快速迭代器与互斥锁相结合来防止使用故障安全迭代器吗?
【问题讨论】:
-
在我看来,如果您觉得需要在哈希映射上进行迭代,您的数据结构设计就会从根本上失败。
-
@ZanLynx,为什么?想要关联并希望能够迭代关联是完全合理的,并且迭代
HashMaps 并没有那么昂贵。
标签: java multithreading iterator hashmap