一个线程安全的map的使用

众所周知,java8提供了juc线程安全相关的包。提供了很多线程的集合,map,set,以及使用的类,和原子性操作的类,atomicInteger等基本数据类型的封装类。

比如说ConcurrentHashMap,这是一个juc包下基于hashMap针对于并发实现的一个数据写入的线程安全的map;虽然它本身是线程安全的,但是,通常我们在使用的操作过程中,不仅仅需要用到put和set方法,还包含了针对于map里存储的数据的操作,大多数情况下,这些数据通常被使用在批量存储,批量统计等方面,不论如何操作,可能都存在与批量二字,那么对于批量操作 ,是你在某个时刻,需要对某个时刻,map存储的数据进行操作,但有一种特殊情况:当你在批量过程中,不是一次性将数据全部取出,而且该过程耗时很长,并且在这个过程中, 又有新数据被put到map中,这样可能会存在数据误差的情况。

针对这个问题,我们再批量操作的时候,应该使用entrySet或者new ConcurrentHashMap来保存这个批量处理临界点的数据,然后基于临时数据来完成批量工作。大家要根据自己的需求严格来过滤数据,做一个严格程序员