java Integer 的 ConcurrentHashMap vs AtomicInteger 的 HashMap vs AtomicInteger 的 ConcurrentHashMap。

问题描述 投票:0回答:1

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

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

如果我理解正确的话

1) 读写是线程安全的,只有一个线程可以对一个对偶进行写操作(读应该是所有线程都允许的),所以如果另一个线程要修改另一个对偶(与之前不同),必须等待获得锁。

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

3)我认为从逻辑的角度来看,和第一种情况是一样的。

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

在多线程的情况下,每个线程都要并发地计算整数值,最好的选择是什么?

java multithreading java.util.concurrent
1个回答
0
投票

当你从地图中添加和删除项目时,并发HashMap可以在多个线程中安全使用。HashMap则不然。多个线程可以读,但只有一个线程可以写,而且在写的过程中,其他线程不应该读。

有一个AtomicInteger作为hashmap的值,可以让多个线程安全地修改一个已经在map中的值。

所以:如果你的地图是静态的(一旦建立了地图,你就不会增加删除任何东西),使用AtomicInteger的HashMap是安全的,开销最小。

如果你要从地图中添加删除项目,请使用ConcurrentHashMap。如果你使用Integer,你必须将值设置到地图上才能修改它。如果你使用AtomicInteger,你可以简单地设置整数值。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.