前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >探究Java的ConcurrentHashMap实现机制

探究Java的ConcurrentHashMap实现机制

作者头像
GavinZhou
发布2019-05-26 09:59:57
6530
发布2019-05-26 09:59:57
举报

原文地址: http://blog.csdn.net/u011080472/article/details/51392712


在学习ConcurrentHashMap的高并发时,找到了一些高质量的博客,就没有重复转载了。分别列出了JDK6中的Segment分段加锁机制和JDK8中的CAS无锁算法并发机制。

基于JDK6

在JDK6中ConcurrentHashMap的的并发实现主要利用内部类Segment实现”分段加锁“的思想。ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEntry 用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接起来的链表。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组。

  1. 程晓明,探索 ConcurrentHashMap 高并发性的实现机制
  2. 方腾飞,聊聊并发(四)——深入分析ConcurrentHashMap

基于JDK8

JDK8的版本,与JDK6的版本有很大的差异。实现线程安全的思想也已经完全变了,它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式实现,但是为了做到并发,又增加了很多辅助的类,例如TreeBin,Traverser等对象内部类。

CAS算法实现无锁化的修改值的操作,他可以大大降低锁代理的性能消耗。这个算法的基本思想就是不断地去比较当前内存中的变量值与你指定的一个变量值是否相等,如果相等,则接受你指定的修改的值,否则拒绝你的操作。因为当前线程中的值已经不是最新的值,你的修改很可能会覆盖掉其他线程修改的结果。这一点与乐观锁,SVN的思想是比较类似的。

  1. ConcurrentHashMap源码分析(JDK8版本)
  2. JAVA CAS原理深度分析
  3. 非阻塞同步算法与CAS(Compare and Swap)无锁算法
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年08月06日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于JDK6
  • 基于JDK8
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档