jdk1.8和jdk1.7对比
1.取消了segment(extends ReentrantLock)分段设计,直接使用Node数组来保存数据,并且采用Node数组元素作为锁(synchronized(node))来实现每一行数据进行加锁来进一步减少并发冲突的概率
2.将原本数组+单向链表的数据结构变更为了数组+单向链表+红黑树的结构
3.CAS无锁算法与synchronized保证和大量volatile修饰变量并发安全,支持并发扩容
问题
1.ConcurrentHashMap的get方法是否要加锁,为什么?
不需要,get方法采用了volatile方法, 来保证线程安全。
2.ConcurrentHashMap迭代器是强一致性还是弱一致性?HashMap呢?
弱一致性,hashmap强一致性。
ConcurrentHashMap可以支持在迭代过程中,向map添加新元素,而HashMap则抛出了ConcurrentModificationException,
因为HashMap包含一个修改计数器,当你调用他的next()方法来获取下一个元素时,迭代器将会用到这个计数器。(iterator.next()一般都有这个判断list等也有)