【发布时间】:2020-04-30 19:48:46
【问题描述】:
我对java中的并发数据结构有疑问,具体来说:
1) ConcurrentHashMap<String, Integer>
2) HashMap<String, AtomicInteger>
3) ConcurrentHashMap<String, AtomicInteger>
如果我理解正确:
1)读/写是线程安全的,只有一个线程可以对一对执行写操作(所有线程都应该允许读取),所以如果另一个线程要修改另一对(与以前不同)必须等待获取锁。
2) 每个线程都可以访问 AtomicInteger 值(肯定是为了读取),但是两个线程可以同时修改不同的一对。
3) 我认为从逻辑的角度来看和第一种情况是一样的
以上三种数据结构的主要区别是什么?
在多线程情况下,每个线程都应该同时增加/减少整数值,最好的选择是什么?
【问题讨论】:
-
主要区别在于
AtomicInteger是可变的,而Integer不是。因此,要更新(Concurrent)HashMap<?, Integer>中的条目,必须更新put(...),而在(Concurrent)HashMap<?, AtomicInteger>中,可以更新值而不需要put更新后的值。
标签: java multithreading java.util.concurrent