相关文章推荐
粗眉毛的沙滩裤  ·  如何从另一个模块/控件事件调用afterup ...·  1 年前    · 
曾经爱过的松树  ·  前端遇到302重定向问题处理方式及设置第三方 ...·  1 年前    · 
无邪的斑马  ·  从ReLU到GELU,一文概览神经网络的激活 ...·  2 年前    · 
听话的显示器  ·  oracle ...·  2 年前    · 
沉着的烈马  ·  android - ...·  2 年前    · 
Code  ›  探究Java的ConcurrentHashMap实现机制
https://cloud.tencent.com/developer/article/1434852
绅士的抽屉
3 年前
GavinZhou

探究Java的ConcurrentHashMap实现机制

前往小程序,Get 更优 阅读体验!
立即前往
腾讯云
开发者社区
文档 建议反馈 控制台
首页
学习
活动
专区
工具
TVP
腾讯云架构师技术同盟
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP 腾讯云架构师技术同盟
返回腾讯云官网
GavinZhou
首页
学习
活动
专区
工具
TVP 腾讯云架构师技术同盟
返回腾讯云官网
社区首页 > 专栏 > 探究Java的ConcurrentHashMap实现机制

探究Java的ConcurrentHashMap实现机制

作者头像
GavinZhou
发布 于 2019-05-26 09:59:57
发布 于 2019-05-26 09:59:57
674 0
举报
文章被收录于专栏: 机器学习实践二三事

原文地址: 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 删除
hashmap
jdk
压力测试
编程算法

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

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

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

hashmap
jdk
压力测试
编程算法
评论
登录 后参与评论
0 条评论
热度
最新
登录 后参与评论
推荐阅读
LV.
文章
0
获赞
0
目录
  • 基于JDK6
  • 基于JDK8
领券
  • 社区

    • 技术文章
    • 技术问答
    • 技术沙龙
    • 技术视频
    • 学习中心
    • 技术百科
    • 技术专区
  • 活动

    • 自媒体同步曝光计划
    • 邀请作者入驻
    • 自荐上首页
    • 技术竞赛
  • 资源

    • 技术周刊
    • 社区标签
    • 开发者手册
    • 开发者实验室
  • 关于

    • 社区规范
    • 免责声明
    • 联系我们
    • 友情链接

腾讯云开发者

扫码关注腾讯云开发者

扫码关注腾讯云开发者

领取腾讯云代金券

热门产品

  • 域名注册
  • 云服务器
  • 区块链服务
  • 消息队列
  • 网络加速
  • 云数据库
  • 域名解析
  • 云存储
  • 视频直播

热门推荐

  • 人脸识别
  • 腾讯会议
  • 企业云
  • CDN加速
  • 视频通话
  • 图像分析
  • MySQL 数据库
  • SSL 证书
  • 语音识别

更多推荐

  • 数据安全
  • 负载均衡
  • 短信
  • 文字识别
  • 云点播
  • 商标注册
  • 小程序开发
  • 网站监控
  • 数据迁移

Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有

深圳市腾讯计算机系统有限公司 ICP备案/许可证号: 粤B2-20090059 深公网安备号 44030502008569

腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287

问题归档 专栏文章 快讯文章归档 关键词归档 开发者手册归档 开发者手册 Section 归档

Copyright © 2013 - 2025 Tencent Cloud.

All Rights Reserved. 腾讯云 版权所有

登录 后参与评论
 
推荐文章
粗眉毛的沙滩裤  ·  如何从另一个模块/控件事件调用afterupdate事件(MS ACCESS VBA)-腾讯云开发者社区-腾讯云
1 年前
曾经爱过的松树  ·  前端遇到302重定向问题处理方式及设置第三方Cookie研究_其它综合_脚本之家
1 年前
无邪的斑马  ·  从ReLU到GELU,一文概览神经网络的激活函数-腾讯云开发者社区-腾讯云
2 年前
听话的显示器  ·  oracle 查询前一小时、一天、一个月、一年的数据_51CTO博客_oracle查询一个月最后一天
2 年前
沉着的烈马  ·  android - 运行模拟器时出错:没有足够的磁盘空间来运行 AVD - SegmentFault 思否
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
Code - 代码工具平台
© 2024 ~ 沪ICP备11025650号