数据结构汇总

1、ConcurrentHashMap

  java1.7中采用Segment +HashEntry +ReentrantLock实现,是用的分段锁

  Java1.8中采用Node + CAS+Synchronized来保证并发安全实现,降低锁的粒度,采用链表

  get时未加锁,因为用了volatile对Map中的Node修饰。  这也是比HashTable、HashMap安全效率高的原因

  volatile修饰数组主要是保证在数组扩容时保证可见性

2、HashMap  :   数组 + 链表

  线程不安全的原因是,在扩容的时候,会将原数组内容重新hash到新的扩容数组,多线程时,同时put就会出问题,get会出现死循环。

 

你可能感兴趣的:(数据结构汇总)