ThreadLocal类为什么会存在冲突?具体讲下吗

ThreadLocal类为什么会存在冲突?具体讲下吗

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
火锅我喜欢吃麻辣的 2022-04-16 12:19:31
这儿课程的编排,有点混乱;东一榔头、西一棒槌的
下载视频          

搜索

复制

好帮手慕小班 2021-08-14 14:34:40

同学你好,对于课程中hashMap中冲突的产生,同学可以这样理解:

    ​    ​HashMap 采用一种所谓的“Hash 算法”来决定每个元素的存储位置。当程序执行 map.put(String,Obect)方法 时,系统将调用String的 hashCode() 方法得到其 hashCode 值——每个 Java 对象都有 hashCode() 方法,都可通过该方法获得它的 hashCode 值。得到这个对象的 hashCode 值之后,系统会根据该 hashCode 值来决定该元素的存储位置。

    ​    ​然后判断当前确定的索引位置是否存在相同hashcode和相同key的元素,如果存在相同的hashcode和相同的key的元素,那么新值覆盖原来的旧值,并返回旧值。

    ​    ​如果存在相同的hashcode,那么他们确定的索引位置就相同,这时判断他们的key是否相同,如果不相同,这时就是产生了hash冲突。

如上所示,就是冲突的产生,同理在ThreadLocalMap中同样存在键值对,同样的冲突也会产生。

http://img1.sycdn.imooc.com//climg/611763a709d723b112310733.jpg

如果同学想表达的不是这个意思,还麻烦同学具体描述下问题。

祝学习愉快~

  • 提问者 qq_慕神0589333 #1

    有没有threadLocal的具体实例遇到冲突的案例

    2021-08-14 15:40:20
  • 好帮手慕小班 回复 提问者 qq_慕神0589333 #2

    同学你好,ThreadLocalMap中是对应的key-value的形式,对应key的内容与HashMap的计算同样存在hash的冲突,也就是使用中的冲突。

    具体就是在应用过程中,例如:    如果我们插入一个value=27的数据,通过hash计算后应该落入表中第4个槽位中,而槽位4已经有了Entry数据,这就是一个hash冲突。

    祝学习愉快~

    2021-08-14 18:29:59
  • 提问者 qq_慕神0589333 回复 好帮手慕小班 #3

    课程中的user对象插入的案例有没可能有冲突呢

    2021-08-14 21:06:58
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师