博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JDK】:ConcurrentHashMap高并发机制——【转载】
阅读量:4286 次
发布时间:2019-05-27

本文共 692 字,大约阅读时间需要 2 分钟。

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

基于JDK6

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

基于JDK8

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

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

你可能感兴趣的文章
error: pathspec '测试2' did not match any file(s) known to git.
查看>>
昵称中含有特殊符号存入mysql数据库处理
查看>>
mybatis中模糊查询时一个字段匹配不定量数据解决方法
查看>>
nginx配置https后重新启动
查看>>
linux环境下安装nginx步骤
查看>>
linux安装redis 完整步骤
查看>>
用java获取指定时区的时间
查看>>
搭建SVN服务器步骤详解
查看>>
javax.mail.MessagingException: 500 Error: bad syntax问题
查看>>
JAVA判断字符串是否base64编码
查看>>
linux(CentOS7.4) 安装 Nginx 1.15.2
查看>>
spring shiro redis : 将session存入redis,实现session共享
查看>>
网站使用QQ互联接入第三方登录,实现qq快捷登录网站的功能
查看>>
第三方网站应用微信登录开发指南
查看>>
网站接入微博快捷登录-微博开放平台
查看>>
linux centos 使用yum安装java
查看>>
微信商户支付开发中的三套商户
查看>>
微信开放平台和公总平台关系图
查看>>
python 写入CSV文件报错:a bytes-like object is required, not 'str'
查看>>
用户故事
查看>>