还看不懂JDK7 HashMap环的产生原理你来打我
JDK7 分析
JDK7中当我们用头插法 对旧table
数据重定位到新table
的时候我们知道是会行程环的,环产生的核心函数transfer
如下,其中重点关注部分以标出。
-
头插法正常情况下: -
并发情况下,比如我有两个线程在同时进行put数据跟扩容操作,线程1只执行了 Entry<K,V> next = e.next
就被挂起了,而线程2 正常执行完毕,结果图如下:线程2执行完毕后线程1接着从原来的暂停处开始执行下面的语句:
通过逐步分析跟绘图可以知道红色部分会有环产生。JDK中HashMap是不安全的,多线程情况下要用ConcurrentHashMap。
7vs8
7中找 Hash
用了4次,8中只用了1次。7 = 数组 + 链表,8 = 数组 + 链表 + 红黑树 7中是头插法,多线程容易造成环,8中是尾插法。 7的扩容是全部数据重新定位,8中是位置不变+ 移动旧size大小来实现更好些。 7是先判断是否要扩容再插入,8中是先插入再看是否要扩容。 HashMap
不管78都是线程不安全的,多线程情况下记得用ConcurrentHashmap
。ConcurrentHashmap
下篇文章说。
常见问题
随机搜罗了一些常见HashMap
问题,如果把HashMap都看懂了应付这些应该没问题。
HashMap原理,内部数据结构。 HashMap中的put,get,remove大致过程。 HashMap中 hash函数实现。 HashMap如何扩容。 HashMap几个重要参数为什么这样设定。 HashMap为什么线程不安全,如何替换。 HashMap在JDK7跟JDK8中的区别。 HashMap中链表跟红黑树切换思路。
你遇到过HashMap的什么问题呢
本文分享自微信公众号 - sowhat1412(sowhat9094)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
头条面试官手把手教学 ThreadLocal
SoWhat:麦叔,最近面别的公司没? 麦叔:上次面试失败桑心死我了,我沉淀了一礼拜面头条去了。 SoWhat:哎呦我去!麦叔你这头条都面上了,面了几轮,手写红黑树没? 麦叔:刚刚两轮,一面红黑树轻松搞定了!面我关于Java的JVM跟并发的时候我看你水的那个JVM系列还有并发系列都过了。最后还问了我点ThreadLocal的问题。 SoWhat:擦,ThreadLocal有啥好问的就是个底层Map啊!并且日常我写数据库事务跟Spring的时候也没见用啊!问那么偏门的干什么他们。 麦叔:擦。。。。你关于ThreadLocal知道的那么点啊?Spring的灵魂除了IOC跟AOP就是ThreadLocal了! SoWhat:真的么,麦叔你给我讲讲要不? 麦叔:好今天让你开开眼。 在这里插入图片描述 介绍 我们看下JDK文档的官方描述:ThreadLocal类用来提供线程内部等局部变量,这种变量在多线程环境下访问(get,set)时能保证各个线程的变量相对独立于其他线程内的变量,ThreadLocal实例通常来说都是private static类型,用于关联线程的上下文。 ThreadLoca...
- 下一篇
网易云音乐基于 Flink + Kafka 的实时数仓建设实践
简介: 本文由 网易云音乐实时计算平台研发工程师岳猛 分享,主要从以下四个部分 将为大家介绍 Flink + Kaf ka 在网易云音乐的应用实战 : 背景 Flink + Kafka 平台化设计 Kafka 在实时数仓中的应用 问题 & 改进 直播回放:https://developer.aliyun.com/live/2894 一、背景介绍 (一)流平台通用框架 目前流平台通用的架构一般来说包括消息队列、计算引擎和存储三部分,通用架构如下图所示。客户端或者 web 的 log 日志会被采集到消息队列;计算引擎实时计算消息队列的数据;实时计算结果以 Append 或者 Update 的形式存放到实时存储系统中去。 目前,我们常用的消息队列是 Kafka,计算引擎一开始我们采用的是 Spark Streaming,随着 Flink 在流计算引擎的优势越来越明显,我们最终确定了 Flink 作为我们统一的实时计算引擎。 (二)为什么选 Kafka? Kafka 是一个比较早的消息队列,但是它是一个非常稳定的消息队列,有着众多的用户群体,网易也是其中之一。我们考虑 Kafka 作为...
相关文章
文章评论
共有0条评论来说两句吧...