ConcurrentHashMap源码学习

简介: ConcurrentHashMap源码学习

实现接口

      ConcurrentMap(Map的基础方法)、Serializable(序列化)

基础属性

最大容量:2^30

默认容量:16

image.pngimage.gif

常用方法

PUT

调用PutVal方法进行插入。

判断key或value是否为空:

是:抛出空指针一场

否:将key的哈希值的上下16位进行异或,是哈希值更散列

       判断节点数组是否为空:

       是:初始化节点数组,并将容量恢复至默认容量16

       否:利用tabAt方法获取hash分配位置的值,如果节点值为null,则利用casTabAt方法将新节点插入到当前位置

       否:hash分配位置的Hash值为-1(转发节点),则调用helpTransfer方法(在调整大小中进行传输)

       否:onlyIfAbsent为true,hash分配位置的节点与插入节点的key相同,且value不为null,返回当前hash位置的value;

       否:给到当前位置节点加锁,判断当前位置节点是否改变

               否:当前位置的hash值是否大于等于0(表示正常节点哈希的可用位),寻找key是否已存在,已存在则判断onlyIfAbsent是否为false,寻找过程中binCount(链表深度)会随着每一次循环加1

                       是:将目标值替换旧值

                       break跳出循环;

                       不存在则将目标节点添加到末尾

               如果当前hash位置的节点是树类型的节点,调用putTreeVal方法来查找和插入节点(先判断节点是否存在,存在则返回节点,不存在则插入当前节点并返回null),返回值不为null则判断onlyIfAbsent是否为false

                       是:将目标值替换旧值

                       break跳出循环;

               如果当前hash位置的节点是ReservationNode类型则抛出异常

thrownewIllegalStateException("Recursive update")
image.gif

     如果binCount不等于0

               binCount大于8:将所有节点转换成树节点

               旧值(相同key)不为null,返回旧值。

调用account将binCount添加到计数中,为下次调整做准备。

目录
相关文章
|
关系型数据库 MySQL PHP
PHP在现代Web开发中的不可替代性####
本文探讨了PHP在当今Web开发领域的独特地位和重要性,分析了其持续受欢迎的原因。通过对比其他编程语言,揭示了PHP的灵活性、易用性和广泛应用场景,强调了其在动态网站构建中的核心作用。文章进一步阐述了PHP与数据库交互的优势,特别是在处理MySQL方面的能力,以及它如何促进开发者社区的创新和发展。最后,讨论了PHP面临的挑战及未来发展趋势,展望了其在新兴技术领域的应用前景。 ####
|
前端开发 JavaScript Python
Python Web应用中的WebSocket实战:前后端分离时代的实时数据交换
在前后端分离的Web应用开发模式中,如何实现前后端之间的实时数据交换成为了一个重要议题。传统的轮询或长轮询方式在实时性、资源消耗和服务器压力方面存在明显不足,而WebSocket技术的出现则为这一问题提供了优雅的解决方案。本文将通过实战案例,详细介绍如何在Python Web应用中运用WebSocket技术,实现前后端之间的实时数据交换。
340 0
|
8月前
|
自然语言处理 安全 API
1688 跨境属性 API 接口(1688API 系列)
1688跨境属性API助力跨境电商发展,提供商品目标市场适配、跨境物流、国际认证及语言文化属性等数据,支持HTTP GET/POST请求。开发者可通过商品ID、目标市场代码和语言参数精准获取信息,提升业务效率与精准度。示例代码展示了如何使用Python进行GET请求,获取商品跨境属性,确保数据准确可靠。
|
人工智能 自然语言处理 程序员
1024程序员节,你都参与了什么?
1024程序员节,阿里云推出多场景开发者活动,涵盖AI助手、云上实操挑战等,提供丰富的上手操作机会及小礼品,助你体验最新技术,提升技能。活动链接:[点击进入](https://developer.aliyun.com/topic/2024/1024cloudup?spm=a2c6h.13066369.question.3.7a606f95NIpx0S)
|
编解码 vr&ar 图形学
Unity下如何实现低延迟的全景RTMP|RTSP流渲染
随着虚拟现实技术的发展,全景视频逐渐成为新的媒体形式。本文详细介绍了如何在Unity中实现低延迟的全景RTMP或RTSP流渲染,包括环境准备、引入依赖、初始化客户端、解码与渲染、优化低延迟等步骤,并提供了具体的代码示例。适用于远程教育、虚拟旅游等实时交互场景。
350 2
|
SQL XML JSON
Hive函数全解——思维导图 + 七种函数类型
Hive函数全解——思维导图 + 七种函数类型
485 2
Hive函数全解——思维导图 + 七种函数类型
|
监控 安全 网络安全
蓝易云 - 服务器遭受攻击,CPU升高,流量升高,你一般如何处理
以上步骤可以帮助你处理服务器遭受攻击的情况,但具体的方法可能会根据你的网络环境和攻击类型有所不同。
244 2
System Generator学习——将代码导入System Generator(二)
System Generator学习——将代码导入System Generator
202 1
|
Arthas 供应链 数据可视化
接口响应慢该如何排查
接口响应慢该如何排查
452 0