请你说明ConcurrentHashMap有什么优势以及1.7和1.8区别?

 

ConcurrentHashMap是线程安全的,在jdk1.7是采用Segment+HashEntry的方式实现的,lock加在segment上, 1.7的size计算是先采用不加锁的方式,连续计算元素的个数,最多计算3次:

(1)如果前后两次计算结果相同,则说明计算出来的元素个数是准确的。

(2)如果前后两次计算结果不同,则给每个Segment进行加锁,再计算一次元素的个数。

1.8中放弃了Segment臃肿的设计,取而代之的是采用Node+CAS+synchronized来保证并发安全进行实现,1.8中使用一个volatile类型的变量baseCount记录元素的个数,当插入或删除数据时,会通过addCount()方法更新baseCount,通过累加baseCount和CounterCell数组中的数量,即可得到元素的总个数。

你可能感兴趣的:(面试,集合,Java基础)