gpt4 book ai didi

java ConcurrentHashMap of Integer vs HashMap of AtomicInteger vs ConcurrentHashMap of AtomicInteger

转载 作者:行者123 更新时间:2023-12-01 16:59:29 26 4
gpt4 key购买 nike

我对java中的并发数据结构有疑问,特别是:

1) ConcurrentHashMap<String, Integer>
2) HashMap<String, AtomicInteger>
3) ConcurrentHashMap<String, AtomicInteger>

如果我理解正确的话:

1) 读/写是线程安全的,只有一个线程可以对一对夫妇执行写操作(应该允许所有线程读取),因此如果另一个线程要修改另一对夫妇(与以前不同),则必须等待获取锁。

2)每个线程都可以访问 AtomicInteger 值(当然是为了读取),但是两个线程可以同时修改不同的值。

3)我认为从逻辑角度来看与第一种情况相同

以上三种数据结构的主要区别是什么?

在多线程情况下,每个线程都应该同时递增/递减整数值,最好的选择是什么?

最佳答案

当您向 map 添加项目或从 map 中删除项目时,可以安全地从多个线程使用 ConcurrentHashMap。 HashMap 不是。多个线程可以读取,但只有一个线程可以写入,并且在写入期间其他线程不应读取。

将 AtomicInteger 作为 HashMap 的值允许多个线程安全地修改映射中已有的值。

因此:如果您的映射是静态的(构建后就不会添加/删除任何内容),则具有 AtomicInteger 的 HashMap 可以安全地以最小的开销使用。

如果您向 map 添加项目或从 map 删除项目,请使用 ConcurrentHashMap。如果使用 Integer,则必须将值设置到映射中才能修改它。如果您使用AtomicInteger,则只需设置整数值即可。

关于java ConcurrentHashMap of Integer vs HashMap of AtomicInteger vs ConcurrentHashMap of AtomicInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61531552/

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