【Java】使用ConcurrentHashMap保证相同的key只会插入一次

前言 

ConcurrentHashMap在java.util.concurrent(JUC)包当中,JUC是在jdk1.5后引入的,多数用在并发环境下,更多详细的类可访问:JUC - 类汇总和学习指南 | Java 全栈知识体系

实现 

ConcurrentHashMap的使用和HashMap一样,不一样的是ConcurrentHashMap可以保证线程安全,先上代码:

ConcurrentHashMap<String, String> cache = new ConcurrentHashMap<String, String>();
String val = cache.putIfAbsent(key, data);
if (val != null) {
    data = val;
}

这是项目当中的一小段代码,可以看出来使用ConcurrentHashMap当缓存使用了,主要实现的功能是在线编辑word的一个协同编辑功能,要保证协同编辑的话需要保证相同的文件id(key值)下data值是一致的,否则在多个用户编辑同一份文件时,保存的文件内容会出现问题,比如两个用户同时打开了一份文件,如果不保证data值是相同的话,这两个用户将会使用两个不一样的data值,这样会导致两个用户之间不知道对方也在编辑这个文件,也会导致用户1编辑的内容无法出现在用户2上,当用户1编辑完保存完后用户2也进行了保存操作,这个时候当用户1重新打开这个文件时发现自己编辑的内容不见了,因为他的内容被用户2的内容覆盖掉了,问题就很严重了,因此我们需要保证data值一致才可,这也是使用ConcurrentHashMap而不是用HashMap的目的,平时用的最多的应该是put方法,没用过putIfAbsent方法,这两个方法的区别在于put会覆盖相同key的value值,putIfAbsent则不会,当然不管是put还是putIfAbsent都有返回值,第一次插入的时候返回值是null,只有在第二次相同key插入时会返回上一次插入的value值,因此才需要判断取出来的value值是否为空!


👍点赞,你的认可是我创作的动力 !
🌟收藏,你的青睐是我努力的方向!
✏️评论,你的意见是我进步的财富! 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梦境游子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值