范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

ConcurrentHashMap是如何保证线程安全的?

  ConcurrentHashMap相当于是HashMap的多线程版本,它的功能本质上和HashMap没什么区别。因为HashMap在并发操作的时候会出现各种问题,比如死循环问题、数据覆盖等问题。而这些问题,只要使用ConcurrentHashMap就可以完美地解决。那问题来到了,ConcurrentHashMap它是如何保证线程安全的呢?1、JDK1.7实现原理
  首先,我们来看JDK 1.7中ConcurrentHashMap的底层结构,它基本延续了HashMap的设计,采用的是数组 加 链表的形式。和HashMap不同的是,ConcurrentHashMap中的数组设计 分为大数组Segment和小数组HashEntry,来着这张图。
  大树组Segment可以理解为一个数据库,而每个数据库(Segment)中又有很多张表(HashEntry),每个HashEntry中又有很多条数据,这些数据是用链表连接的。了解了ConcurrentHashMap的基本结构设计,我们再来看它的线程安全实现,就比较简单了。
  接下来我们来对照JDK1.7中ConcurrentHashMap的put()方法源码实现。
  因为Segment本身是基于ReentrantLock重入锁实现的加锁和释放锁的操作,这样就能保证多个线程同时访问ConcurrentHashMap时,同一时间只能有一个线程能够操作相应的节点,这样就保证了ConcurrentHashMap的线程安全。
  也就是说ConcurrentHashMap的线程安全是建立在Segment加锁的基础上的,所以,我们称它为分段锁或者片段锁,如图中所示。
  那JDK1.8又是如何实现的呢?2、JDK1.8优化内容
  在JDK1.7中,ConcurrentHashMap虽然是线程安全的,但因为它的底层实现是数组加链表的形式,所以在数据比较多情况下,因为要遍历整个链表,会降低访问性能。所以,JDK1.8以后采用了数组 加 链表 加 红黑树的方式优化了ConcurrentHashMap的实现,具体实现如图所示。
  当链表长度大于8,并且数组长度大于64时,链表就会升级为红黑树的结构。JDK 1.8中的ConcurrentHashMap虽然保留了Segment的定义,但这,仅仅是为了保证序列化时的兼容性,不再有任何结构上的用处了。
  那在JDK 1.8中ConcurrentHashMap的源码是如何实现的呢?它主要是使用了CAS 加 volatile 或者 synchronized 的方式来保证线程安全。
  我们可以从源码片段中看到,添加元素时首先会判断容器是否为空,
  如果为空则使用 volatile 加 CAS 来初始化,
  如果容器不为空,则根据存储的元素计算该位置是否为空。
  如果根据存储的元素计算结果为空则利用 CAS 设置该节点;
  如果根据存储的元素计算为空不为空,则使用 synchronized ,然后,遍历桶中的数据,并替换或新增节点到桶中,
  最后再判断是否需要转为红黑树。这样就能保证并发访问时的线程安全了。
  如果把上面的执行用一句话归纳的话,就相当于是ConcurrentHashMap通过对头结点加锁来保证线程安全的。
  这样设计的好处是,使得锁的粒度相比Segment来说更小了,发生hash冲突 和 加锁的频率也降低了,在并发场景下的操作性能也提高了。而且,当数据量比较大的时候,查询性能也得到了很大的提升。2、总结
  最后,我们来总结一下:
  1、ConcurrentHashMap在JDK 1.7中使用的数组 加 链表的结构,其中数组分为两类,大树组Segment 和 小数组 HashEntry,而加锁是通过给Segment添加ReentrantLock重入锁来保证线程安全的。
  2、ConcurrentHashMap在JDK1.8中使用的是数组 加 链表 加 红黑树的方式实现,它是通过 CAS 或者 synchronized 来保证线程安全的,并且缩小了锁的粒度,查询性能也更高。
  ConcurrentHashMap中有很多设计思想是值得我们去学习和借鉴的,比如说锁的粒度控制、分段锁的设计等等,都可以应用在实际的业务开发场景中。我们通过学习这些底层原理从中获取很多的设计思路,帮助我们更高效地去解决实际问题。
  好了,关于ConcurrentHashMap的分享就讲到这里,听懂的小伙伴,请关注点个赞,下次不迷路。
  S信【Tom】或【666】即可免费领取需要更多干货内容,还有海量面试资料,只弹干货不惨水!
  本文为"Tom弹架构"原创,转载请注明出处。技术在于分享,我分享我快乐!
  如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号『 Tom弹架构 』可获取更多技术干货!
  关注微信公众号『 Tom弹架构 』可获取更多技术干货! 往期视频已经整理成文档形式,需要的小伙伴点个关注,搜索下方名片!我是被编程耽误的文艺Tom,

华为新举动麒麟9000内置鸿蒙,价格跌至5199元当手机市场的发展速度变快之后,用户在选择产品时候的变化也会变得非常大,尤其是价格方面的松动,更是有多款机型都是如此。因为如今的竞品太多了,几乎每个月都能够看到新机来袭,尽管产品之间OLED产业集体感谢雷军?他的功劳是把价格拉下来了蓝科技观察小米每次的新产品,都会激起行业一片涟漪。讨厌小米的人,认为是搅局喜欢小米的人,认为他们的价格策略更亲民。不管你喜欢不喜欢,你必须承认为小米是绕不过去的一道门槛。甚至在某种怎样才能神不知鬼不觉的把24寸显示器换成43寸,不让老婆知道?第一年,换成27寸第三年,换成32寸第五年,换成37寸第七年,换成40寸第九年,换成43寸。相信我,她看不出来。我就是这么干的,从19寸开始,22。5,现在用的24,机箱没换过,里人类有没有可能被设计出来?人类有没有可能是被设计出来的?从地球诞生一直到人类诞生,期间经过了无数个物种,甚至有着比人类更加古老的生物,那么为何只有人类会脱颖而出?人类未来又将如何发展?都是一连串的谜团简单的假如现在都不用智能手机,会不会颈椎病会越来越少?那也不一定谢谢朋友邀请回答,不要说假如,这是现实问题,智能手机的普及确实对颈椎印象很大,包括我自己前年颈椎犯病,天旋地转伴有呕吐,到医院急诊检查,脑CT检查没有问题,医生说是颈椎引红米手机拿不出手怎么办?这位同学,我可以很负责任的告诉你,小米手机可以说是目前手机市场上性价比最高的手机,无论是他的配置,还是他的系统,硬件,等等各个方面。选择用小米的用户,一般都是一群非常聪明的人,甚至高通有5g华为也有5g,为什么华为不可以在自家手机上用自家的5g技术而要交高通费?应邀回答本行业问题。在通信业里,没有任何一家公司可以全覆盖的掌握所需要的专利技术,所以在生产一种产品的时候,需要和其他的公司进行交叉专利授权。但是高通的情况比较特殊一些,因为它并不恒大负债累累,马化腾20亿相助,为什么马云保持沉默?恒大负债累累,有的想投,有的不想投,原因很多自从去年开始,对阿里的敲打很多,马云在最近半年非常低调,已经不在出现在媒体之中。现在再往恒大投钱,无疑又会引发各界的关注。马云现在不能随量子纠缠是属于唯物主义还是属于唯心主义?能用科学解释的就是唯物呗,是吗?理解不了,证明不了,当前,那么就跟巫师胡咧咧差不多唯物唯心根本是西方二元论的哲学戏论,而且一般人根本也不懂,西方根本没有唯心主义,idea,不同的西华为对中国有什么贡献,为什么说华为不能倒下?华为是中国在5G通讯方面首次超越美国,站在全世界的制高点上。在现代国家安全和战争中,通讯联络具有无比重要的地位,这也是美国人千方百计的对世界各国的领导人和科技公司进行窃听的原因。华国外的公司都是如何处理大龄程序员的?国外几乎没有处理大龄程度员一说!至少美国这边就没有!本人是恢复高考后77级大学生,八十年代,上海名校研究生毕业。八十年代末来美读商学院,那时候中国经济还没起步,毕业后根本找不到对华
航空航天类专业解读智能飞行器技术一智能飞行器技术专业是什么?智能飞行器技术属于航空航天类专业,基本修业年限为四年,授予工学学士学位。智能飞行器技术专业为服务国家在智能飞行器技术领域对高素质专业的人才需求,培养具有电脑维修日记我会记录我维修电脑的日志。维修尽量都体现在这一篇文章上,后期的维修记录填写在评论上。20160317电脑显示屏没有全屏用显示屏自带的按钮菜单,自动调整,您好你找到电脑上的MENU键摄像头必须要有WiFi才能使用吗很多处于观望中的人群对监控摄像机感到困惑,因为很多摄像头都在宣传无线WiFi传输,WiFi远程监控,监控摄像头是否只有在有WiFi环境才能使用呢?其实不然,WiFi只是一种信号或者最大功率1050马力,FF91准量产车正式亮相,约合人民币280万元日前,Auto情报处从海外媒体处获悉,FF91准量产车正式亮相,新车将定位中大型纯电SUV,售价约合人民币280万元,新车很有可能会在未来正式量产FF91在外观方面的设计,可以说是如何评价2月25日发布的努比亚Z40Pro手机?售价3399元起,性价比如何?如何评价2月25日发布的努比亚Z40Pro手机吗?售价3399元起,性价比如何?努比亚手机在国内销量差得要命(业内被称为小众品牌),但评价非常高,因为选择什么品牌手机是没有一个固定如何评价2022年2月25日的农心杯上申真谞以81。8的ai吻合度击败柯洁?大家的怀疑,是可能存在的AI作弊。如果小申真的拥有弱AI的实力,那该他君临天下!只是,需要先解除大家的疑惑!有两种方法1。决赛采用面棋。2。决赛若用网棋,需采用对手棋院提供的电脑,技术分享Linux系统中的库大家好,我是阿木实验室的松溪,今天给大家介绍一下,Linux系统中,库的概念。一库的简介什么是库,库简单地说,就是模块。用于提供不同功能的模块,比如我们经常会用的ceres库,ei推荐一款TCL最新电视TCL近年来也在研发MiniLED技术。目前全球高端的显示面板一定是往这个技术上发展,就简单来说,苹果电脑高端配置用MiniLED,低端配置用OLED,就很能说明问题。前两天和TC三星GalaxyS22UltraTabS8国行版手机平板发布三星在国内召开了GalaxyS22系列国行版发布会,正式推出了三星GalaxyS22Ultra系列旗舰手机以及三星GalaxyTabS8平板产品。这次采用了非常新颖的小品式发布会,给充电做减法,一站式充电体验Anker安克65W三口超能充前言当把家里的每个数码设备配备的充电器都收集起来之后,你就就会惊奇的发现原来拥有这么一堆的充电器,有iPhone的有平板的有智能手表的有耳机的等等,这样的场景应该每个小伙伴都能遇到核酸检测技术上新较传统方法漏判误判率更低数字PCR技术灵敏度高可精准定量。那些多次采用实时荧光定量PCR方式进行核酸检测,结果却为阴性的病毒携带者,利用数字PCR技术就能准确地检测出他们是阳性患者。春节前后,国内外新冠肺