jdk1.7
    CurrentHashMap采用了分段锁机制,即为分为16个segment,每个segment对应entry数组中的一段,每次put或get操作时,都需要计算key的hash以便得到具体应该获取哪个segment,再进行读取或写入操作。其中segment是Lock类的实现,所以自带锁功能,但是这种实现方式效率并不高

    jdk1.8
    1.8的版本采用了Node + CAS + Synchronized关键字的方式,put操作时,根据hash值寻找node数组中对应下标的NODE,若node为null,那么采用CAS进行插入。反之则判断NODE是否处于移动状态,若不处于则采用synchronized进行加锁并循环链表进行写入操作,如果该节点是TreeBin类型的节点,说明是红黑树结构,则通过putTreeVal方法往红黑树中插入节点,最后计算binCount变量的值是否大于0,如果大于0,则说明写入操作成功,另外如果大于8,则会进行数与链表的转换

    其他:
    CurrentHashMap的key和value都不允许为null,HashMap允许
    HashMap与CurrentHashMap - 图1