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

前言 

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

实现 

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

ConcurrentHashMap cache = new ConcurrentHashMap();
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值是否为空!


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

你可能感兴趣的:(Java,java,juc)