hashMap
线程不安全,在多线程情况下会造成链表死循环
hashTable
线程安全,性能低,内部通过给方法加synchronized 关键字,来解决线程安全的
ConcurrentHashMap
线程安全,性能高,内部采用synchronized+CAS机制实现分段锁来解决线程安全,具体为:
jdk1.7,将底层数组分为多个segment(部分),每个segment都有一把锁,这样就提高了并发量(每个segment都包含若干个hashEntry),使用Lock锁

jdk1.8取消了segment,直接将每个hashEntry加锁,利用synchronized+CAS进行锁定,当有元素put时,现根据key计算hash值,如果该位置没有元素,则用CAS机制进行插入,如有有元素,看数组是否在扩容,在扩容的话,该线程帮助扩容,如果没有在扩容或扩容完毕,则用synchronized加锁进行put