HashMap 和 concurrentHaspMap 的陷阱与区别

15 篇文章 4 订阅 ¥39.90 ¥99.00
在多线程环境中,使用线程安全的ConcurrentHashMap替代HashMap时,可能会遇到一个陷阱。当统计HashMap中value的整型总数时,直接用ConcurrentHashMap替换并去掉synchronized关键字,会导致统计结果比HashMap多一。问题源于两者的并发处理机制不同。
摘要由CSDN通过智能技术生成

欢迎关注博主公众号:【矿洞程序员】文章由陈晓阳原创。
本人微信:chenxiaoyangzxy. 免费提供本人大量学习资料。

在多线程并发编程中,我们对于共享的数据对象或者是容器会采用线程安全的集合来存储。Java中 提供了一些线程安全的容器和对象,有些事支持并发的,java.util.concurrent 包中 有很多这样的类。这种方式的效率会比简单的加互斥锁的实现更好,但是有时通过加锁把使用线程不安全的容器代码改为使用线程安全容器的代码时,会遇到一个陷阱。
在一个使用map 存储信息后 ,统计总数的例子中。
一:map 中的value 整型使用线程不安全的hashMap代码时这样写的。

private HashMap<String,Integer> map=
new HashMap<String, Integer>();
    public synchronized  void add1(String key){
        Integer value=map.get(key);
        if(value==null){
            map.put(key,1);
        }else{
            map.put(key,value+1);
        }
    }

二:使用concurrentHashMap 来替换hashMap 并且是仅仅去掉synchronized 关键字 那么问题就

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纯洁的明依

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值