ConcurrentHashMap
在JDK1.7中ConcurrentHashMap采用了数组+Segment+分段锁的方式实现
JDK8 HashMap的实现,采用了数组+链表+红黑树的实现方式来设计,内部大量采用CAS操作
CAS 操作包含三个操作数 —— 内存值(V)、预期值(A)和新值(B)。如果内存值(V)和预期值(A)的值是一样的,那么才会将内存里面的值更新成新值(B)
CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取内存值(V)被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行
下面三个场景都使用ConcurrentHashMap:
1、多线程添加或删除。2、遍历的时候删除。3、多线程遍历的时候删除数据
Atomic类
基于CAS操作实现的