ConcurrentHashMap和HashTable

一、HashTable(线程安全)

读方法写写方法都加锁,锁数量太少,竞争激烈


image.png
image.png
image.png

二、ConcurrentHashMap(线程安全)

对hash值,进行分段加锁,hash值处在同一个segment的进行加锁。

1. 多线程HashMap出现死循环的问题

扩容时,同时调用reHash方法,导致形成环形列表,且有些元素位置错乱。下次获取元素时,可能会在循环列表中获取,但是元素错乱后,无法找到,导致死循环。

2.ConcurrentHashMap分段加锁原理

2.1spread进行分组


image.png

2.2 put操作时
如果hash位置没有元素,采用cas写入元素


image.png

如果hash位置已有元素,且对象相等,则更新
如果hash碰撞,则synchronied加锁操作
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java SE 基础: 封装、继承、多态 封装: 概念:就是把对象的属性和操作(或服务)结合为一个独立的整体,并尽...
    Jayden_Cao阅读 6,490评论 0 8
  • 转载:https://www.cnblogs.com/xdouby/p/6026618.html 在JDK 1.4...
    境里婆娑阅读 7,575评论 0 4
  • 不知道大家有没有看过电影《七宗罪》,这部由布拉德皮特主演的电影在豆瓣的评分高达8.7,讲诉了城市中发生了一系列连环...
    屠龙女青年阅读 3,680评论 0 3
  • 相信大家肯定都有过为了调试而添加打印变量,或者使用直接常量代替函数调用结果,或者更改判断条件以进入某特定分支的调试...
    纵横而乐阅读 6,125评论 0 3
  • 今天晚上聚会,我非常感动,特别是今天的经文:亚:4:6不是依靠势力,不是依靠才能,乃是依靠神的灵方能成事,觉得圣灵...
    恩宠爸爸阅读 12,272评论 0 0

友情链接更多精彩内容