开发者社区> 问答> 正文

ConcurrentHashMap的1.7和1.8版本的区别是什么?

ConcurrentHashMap的1.7和1.8版本的区别是什么?

展开
收起
cuicuicuic 2021-10-28 21:28:56 543 0
1 条回答
写回答
取消 提交回答
  • 在初始化ConcurrentHashMap的时候,会初始化一个Segment数组,容量为16,而每个Segment都继承了ReentrantLock类,也就是说每个Segment类本身就是一个锁,之后Segment内部又有一个table数组,而每个table数组里的索引数据呢,又对应着一个Node链表. 这个是对1.7版本的ConcurrentHashMap的实现一个简单总结。 取消了segment数组,直接用table保存数据,锁的粒度更小,减少并发冲突的概率。 存储数据时采用了链表+红黑树的形式,纯链表的形式时间复杂度为O(n),红黑树则为O(logn),性能提升很大。什么时候链表转红黑树?当key值相等的元素形成的链表中元素个数超过8个的时候。 1.8之后Synchronized上锁的对象,Synchronized是靠对象的对象头和此对象对应的monitor来保证上锁的,也就是对象头里的重量级锁标志指向了monitor,而monitor,内部则保存了一个当前线程,也就是抢到了锁的线程.是将每一个Node对象作为了一个锁,将锁细化了,只要让Node类继承ReentrantLock就行

    2021-10-28 21:29:42
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载