hashmap的头插法问题

无意当中了解了这个问题,hashmap的数据插入的时候分为头插法和尾插法,头插法在jdk1.8之前,尾插法在jdk1.8实现。

因为头插法会出现链表成环的问题,所以插入方式进行了改变,变为尾插法。即使链表成环,如果不在这个链表中查询也不会出现问题,即使查询,如果查询的不是环中的值,也不会出现问题,只有查询环中的值才会出现问题。

说明:hash值和插入数据仅作说明问题用,源码请参考其它博主的优秀文章。

例如次数要查询5并不会出现问题,但是查询hash值为2,但是value不再这个链表中的数据会出现问题,例如查询33(hash=2)就会出现死循环的问题。

那么这个链表是如何成环的?

必须是在多线程环境下,在一定的条件下才可能形成环路。

假设有两个线程,线程1和线程2,在插入数据后都要进行扩容操作,线程1先进行扩容操作。

此时线程1要进行 扩容操作,对hash=2的链表取出再放入新的链表的时候(假设链表中hash值依然相同),线程中断,此时只取得了e=5,next= 9;然后线程2执行。

线程2正常执行:

然后线程1继续执行,

此时,再继续执行的时候,原数据已经被线程2更改,所以会从新的、线程2更改后的数据中取值,此时,在hash=2这个桶中,e=9,next=5,继续执行,

执行到现在依然没有什么问题,继续执行,由线程2执行后的表可以,此时e=5,5.next=null ,线程1会进行本链表的最后一次插入操作,会将值插在链表的头部,

此时,在插入数值后,value5是指向value9的,所以会替换之前的value5指向null,这个地方是我看了好多文章之后的个人理解,仅供参考。

最终的表现形式:

并发环境下hashmap头插法的问题相关推荐

  1. 并发环境下HashMap引起的full gc排查

    参考:http://ifeve.com/case-of-hashmap-in-concurrency/    http://ifeve.com/hashmap-infinite-loop/

  2. java 无锁缓存_如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  3. 如何在高并发环境下设计出无锁的数据库操作(Java版本) 转载

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  4. 【高并发】高并发环境下构建缓存服务需要注意哪些问题?我和阿里P9聊了很久!...

    写在前面 周末,跟阿里的一个朋友(去年晋升为P9了)聊了很久,聊的内容几乎全是技术,当然了,两个技术男聊得最多的话题当然就是技术了.从基础到架构,从算法到AI,无所不谈.中间又穿插着不少天马行空的想象 ...

  5. 高并发环境下如何优化Tomcat性能?看完我懂了!

    来自:冰河技术 写在前面 Tomcat作为最常用的Java Web服务器,随着并发量越来越高,Tomcat的性能会急剧下降,那有没有什么方法来优化Tomcat在高并发环境下的性能呢? Tomcat运行 ...

  6. 【高并发】在高并发环境下该如何构建应用级缓存?

    来自:冰河技术 写在前面 随着我们的系统负载越来越高,系统的性能就会有所下降,此时,我们可以很自然地想到使用缓存来解决数据读写性能低下的问题.但是,立志成为资深架构师的你,是否能够在高并发环境下合理并 ...

  7. oom 如何避免 高并发_【高并发】高并发环境下如何防止Tomcat内存溢出?看完我懂了!!...

    [高并发]高并发环境下如何防止Tomcat内存溢出?看完我懂了!! 发布时间:2020-04-19 00:47, 浏览次数:126 , 标签: Tomcat 写在前面 随着系统并发量越来越高,Tomc ...

  8. cache数据库和mysql_并发环境下,先操作数据库还是先操作缓存?

    原标题:并发环境下,先操作数据库还是先操作缓存? 来源:捡田螺的小男孩 前言 在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?本文将分5种方案 展开阐述对比,谢谢阅 ...

  9. 高并发环境下,6个构建缓存服务需要注意的问题

    摘要:高并发环境下如何构建缓存服务,你知道吗? 本文分享自华为云社区<[高并发]高并发环境下构建缓存服务需要注意哪些问题?>,作者:冰 河. 缓存特征 (1)命中率:命中数/(命中数+没有 ...

最新文章

  1. R语言Brown-Forsythe检验验证组间方差是否相等实战:执行Brown-Forsythe检验、如果各组间的方差不相等我们该怎么办(进行方差分析)
  2. 软件工程-第三次作业
  3. JAVA 通过URL 获取页面内容
  4. wxWidgets:wxHTML 概述
  5. c# 中通快递对接_快递共配是什么?行业前景怎么样?
  6. fcn从头开始_如何使用Go从头开始构建区块链
  7. 通过Server-U设置网络共享文件夹的步骤和注意事项
  8. Paros工具使用手册
  9. 【CS论坛】维护网络安全的四块基石
  10. PHP Mysql:时间函数
  11. Security+ 学习笔记11 应用程序攻击
  12. Cookie机制小记
  13. 免费微信小程序商城源代码,基于Uni-App,实现一码多端
  14. javascript animation lib greensock gsap介绍
  15. SoundPool概述
  16. CF1071C. Triple Flips
  17. html 查找页面内容,如何在html页面中实现查找功能
  18. Idea突然不停indexing的问题
  19. 啊哈算法 --对冒泡排序python写法
  20. 为什么游戏流畅需要60帧,而电影流畅只需要24帧?

热门文章

  1. 轻巧好用的开源 Redis 可视化工具
  2. 小猿圈讲解Linux常见的版本
  3. mysql数据库损坏修复方法(适用window、Linux系统vps云主机)
  4. (原创)Oracle10g客户端下载/安装
  5. APSIM练习 2:残留物覆盖对休耕期间土壤储水的影响
  6. serverlet 区别_JSP serverlet的区别及联系介绍
  7. 删除含有某个字符的文件
  8. CCC3.0学习笔记_SPAKE2+ Flow 流程
  9. 使用单元测试框架Pytest生成HTML测试报告及优化
  10. 绘制学习曲线——plot_learning_curve