ConcurrentHashmap使用问题

本文探讨了ConcurrentHashMap在多线程环境下使用时可能遇到的问题,特别是get和put操作结合使用时可能导致的数据覆盖问题。

 

再补充下哈

虽然ConcurrentHashMap是线程安全的,

看看下面一段代码:

Java代码

01. ConcurrentHashMap map;
02.     String getString(String name) {
03.   
04.         String x = map.get(name);
05.   
06.         if (x == null) {
07.   
08.             x = new String();
09.   
10.             map.put(name, x);
11.   
12.         }
13.   
14.         return x;
15.     }


如果你只调用get(),或只调用put()时,ConcurrentHashMap是线程安全的。
但是,在你调用完get后,调用put之前,
如果有另外一个线程调用了map.put(name, x),
你再去执行map.put(name,x),
就很可能把前面的操作结果覆盖掉了。
所以,即使在线程安全的情况下,
你还是有可能违反原子操作的规则。


转载于:https://www.cnblogs.com/sunwei2012/archive/2010/12/11/1903439.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值