gpt4 book ai didi

java - 多线程 : Map Performance

转载 作者:行者123 更新时间:2023-12-02 12:48:24 24 4
gpt4 key购买 nike

在多线程中我想使用一个会更新的Map,考虑到性能哪个Map会更好1.HashMap 2.ConcurrentHashMap?另外,如果我让它变得不稳定,它的性能会变慢吗?

它将在 Java 批处理中使用大约 10 分钟。 2000 万条记录。目前我没有在线程之间共享这张 map 。在线程之间共享 map 会降低性能吗?

最佳答案

HashMap 在性能方面会更好,因为它不以任何方式同步。 ConcurrentHashMap 增加了管理并发读取(尤其是并发写入访问)的开销。

话虽如此,在多线程环境中,您负责根据需要同步对 HashMap 的访问,这也会降低性能。

因此,仅当用例允许对同步逻辑进行非常具体的优化时,我才会选择 HashMap。否则,ConcurrentHashMap 将为您节省大量同步时间。

但是,请注意,即使使用 ConcurrentHashMap,您也需要仔细考虑所需的同步级别。 ConcurrentHashMap 是线程安全的,但不是完全同步的。例如,如果您绝对需要将每个读取访问与每个写入访问同步,您仍然需要自定义逻辑,因为对于读取操作,ConcurrentHashMap 将提供上次成功完成写入操作后的状态。也就是说,可能仍然存在正在进行的写入操作,而读取不会看到该操作。

对于 volatile ,这仅确保对该特定字段的更改将在线程之间同步。由于您可能不会更改对 HashMap/ConcurrentHashMap 的引用,而是在实例上工作,因此性能开销可以忽略不计。

关于java - 多线程 : Map Performance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44668385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com