美文网首页
每日一题:HashMap为什么线程不安全?2020-06-30

每日一题:HashMap为什么线程不安全?2020-06-30

作者: 写代码的杰西 | 来源:发表于2020-06-30 16:20 被阅读0次

    1.在jdk1.7中,在多线程环境下,扩容时会造成环形链或数据丢失。
    2.在jdk1.8中,在多线程环境下,会发生数据覆盖的情况。
    因为开始工作以后就是从1.8开始用的,这里只分析1.8的源码
    HashMap的put方法中有这么一行

    if ((p = tab[i = (n - 1) & hash]) == null) // 如果没有hash碰撞则直接插入元素
                 tab[i] = newNode(hash, key, value, null);
    

    如果经过hash计算以后的位置为null,就直接newNode插入到tab[i]的位置。
    这里如果2个线程同时进入,同时计算,得到的结果都是null,然后同时newNode,那么第一个数据就会被覆盖。

    相关文章

      网友评论

          本文标题:每日一题:HashMap为什么线程不安全?2020-06-30

          本文链接:https://www.haomeiwen.com/subject/cipxqktx.html