java面经系列-ConcurrentHashMap

54 阅读1分钟

1、ConcurrentHashMap的数据结构 在jdk1.7 采用的分段数组+链表实现的(不可扩容) 在jdk1.8采用的是数组+链表+红黑树实现 1、ConcurrentHashMap是如何保证线程安全的 在jdk1.7的时候使用的是分段锁,即将hash表分成多个段每段进行加锁的方式实现,这样多个线程同时访问hash表的时候,只对当前段加锁而不是整个hash表 在jdk1.8采用的是cas+sync实现,先使用cas的方式来修改元素,如果cas修改失败,则使用sync锁住当前hash槽再来尝试修改,避免锁的粒度过大,提高并发性能