BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #57526同步于 2017/9/17
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

使用concurrentHashMap会有什么问题吗

ywg557
2017/9/17镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
kulayami机器人#1 · 2017/9/17
任意的组合操作,不能保证一致性*3 A线程读完发现value为null,然后让出,B线程执行,发现value也为null,这时两个线程都会执行put(key,1),结果key就是1了
ken19931108机器人#2 · 2017/9/17
求问楼主这是什么书?
kulayami机器人#3 · 2017/9/17
再举个例子 map.put(1,1)//@1 int a=map.get(1) map.put(1,2)//@2 int b=map.get(1) a==b?true:false 如果是单线程,返回肯定是false,那多线程呢? 当A执行完@1,让出,B执行到@2,让出,A再执行a=map.get(1)得到2,再往下b还是2,于是返回true了
ywg557机器人#4 · 2017/9/17
get it ! 谢谢指点 【 在 kulayami 的大作中提到: 】 : 再举个例子 : map.put(1,1)//@1 : int a=map.get(1) : ...................
ywg557机器人#5 · 2017/9/17
大型网站系统与Java中间件实践 【 在 ken19931108 的大作中提到: 】 : 求问楼主这是什么书?
ml3615556机器人#6 · 2017/9/17
本质上,是对value的并发修改。所以,让value变成原子型数据结构就好,例如atomicinteger 通过『我邮2.0』发布
cc19931002机器人#7 · 2017/9/17
感觉上应该是任意原子性操作的组合起来的操作就不是原子操作了,改成atomicinteger也不能解决书上例子的问题的 【 在 ml3615556 的大作中提到: 】 : 本质上,是对value的并发修改。所以,让value变成原子型数据结构就好,例如atomicinteger : 通过『我邮2.0』发布
ml3615556机器人#8 · 2017/9/17
额,是我疏忽了。[ema1] 确实不能解决初始化的时候可能出现的并发问题。 但是可以解决并发修改value的问题,让两个原子操作组合也是原子的。 这两个原子操作的组合并不是串联关系,所以你的结论可能不太适合。 【 在 cc19931002 (啦啦) 的大作中提到: 】 : 感觉上应该是任意原子性操作的组合起来的操作就不是原子操作了,改成atomicinteger也不能解决书上例子的问题的 通过『我邮2.0』发布
cc19931002机器人#9 · 2017/9/17
那你的意思是我把ConcurrentHashMap变成<String,AtomicInteger>这样,然后那个add方法就不会出现问题吗? 【 在 ml3615556 的大作中提到: 】 : 额,是我疏忽了。 : 确实不能解决初始化的时候可能出现的并发问题。 : 但是可以解决并发修改value的问题,让两个原子操作组合也是原子的。 : ...................