java.util.concurrent.ConcurrentHashMap源码学习(四)

ConcurrentHashMap中内部类Segment<K,V>的重要方法


重要方法:

a) static final <K,V> Segment<K,V>[] newArray(int i)
创建指定大小的Segment数组。
b) HashEntry<K,V> getFirst(int hash)
得到当前段指定槽位的第一个Entry。
c) V readValueUnderLock(HashEntry<K,V> e)
在加锁的状态下读取指定HashEntry的值。
d) V get(Object key, int hash)
得到指定key和hash码对应的value。先取得对应槽位的第一个Entry,在链表中迭代找到对应key的Entry,最后在加锁的状态下读取value。
e) boolean containsKey(Object key, int hash)
判断当前Segment中是否存在指定key和hash码的Entry。先取得对应槽位的第一个Entry,在链表中迭代找到对应key的Entry。
f) boolean containsValue(Object value)
判断当前Segment中是否存在指定value。循环table中的所有元素,然后到链表中迭代找出value,如果迭代过程中找到的value为会在加锁的情况下再次读出value。
g) boolean replace(K key, int hash, V oldValue, V newValue)
在加锁的状态下替换指定key、hash码和oldValue的元素的值为newValue,替换成功是返回true,否则返回false。
h) V replace(K key, int hash, V newValue)
在加锁的状态下替换指定key和hash码的元素的值为newValue,替换成功是返回true,否则返回false。
i) V put(K key, int hash, V value, boolean onlyIfAbsent)
在加锁的状态下插入指定的key、hash码、value。插入前会确认当前容量,如果超过阈值会调整table的大小。其中onlyIfAbsent为false时才替换已存在的值。
j) void rehash()
调整table的大小。调整后需要重新组织每个链表中的元素,如果原来的槽位上只有一个节点就直接把这个链表移到新的槽位;如果有多个节点,先把链表末端的节点移到新的槽位,然后把其余的节点克隆到新的槽位。旧的table的元素没有置空,交给垃圾收集机制去处理。
k) V remove(Object key, int hash, Object value)
删除一个节点,当value为null是只按key查找节点,反之按key和value查找节点。被删除节点下面的节点保持不变,前面的所有节点要重新生成(克隆)。
l) void clear()
在加锁的状态下,数组table的所有元素置null,同时设置count值为0。
别再为SCI论文配图发愁了!手把手教你用PS+AI搞定从数据图到模式图的全流程 本文详细解析了如何利用Photoshop(PS)和Illustrator(AI)高效完成SCI论文配图的全流程,涵盖数据可视化、模式图设计及期刊适配性输出。通过实战案例,帮助科研人员掌握位图与矢量图的处理技巧,提升论文配图质量,满足不同期刊的出版要求。 阅读详情

相关推荐

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 995

调用接口常用的几种方法

我们在使用String转jsonObject的时候通常使用这两种方法 net.sf.json.JSONObject bodyData = net.sf.json.JSONObject.fromObject(bodyStr); JSONObject result = JSONObject.parseObject(resultStr); 这两种方法之所以不同一是因为导入的jar包不同,二是根据对接的代码来的如果对接的代码使用那种我们最后就跟着使用那种,使用第二种方法常用。 如果参数很多,并且body大部分都

bestQz的博客 1万+

C# OpenCvSharp4实战:5分钟搞定工业视觉模板匹配(附完整代码)

本文为C#开发者提供了基于OpenCvSharp4的工业视觉模板匹配实战指南。通过详细的环境搭建、核心原理解析和完整代码示例,重点介绍了如何使用`matchTemplate`函数,特别是`CCoeffNormed`方法,快速实现高精度、抗光照变化的模板匹配,并分享了多目标匹配、图像预处理等工业级优化技巧。

weixin_29053067的博客 503

openfeign调用提供者时空指针异常(已解决)

Openfeign报空指针异常,nacos整合Openfeign报空指针异常(已解决)

qq_17787433的博客 2210

瑞芯微RV1126B芯片实战:如何用3Tops NPU打造智能安防摄像头(附配置指南)

本文详细介绍了基于瑞芯微RV1126B芯片构建高性能智能安防摄像头的实战经验。文章深入剖析了其3Tops NPU与独立AI-ISP的协同优势,提供了从硬件选型、开发环境搭建、AI模型部署到系统调优的全流程配置指南,帮助开发者充分发挥芯片潜力,实现高效、稳定的智能视觉应用。

weixin_29281915的博客 443

医学影像弹性形变处理

这段代码的主要流程是:读取 DICOM 医学影像,尝试使用 MONAI 进行弹性形变(根据版本适配),如果失败则使用 OpenCV 实现,最后可视化并保存处理结果。这样可以在不同环境下灵活处理医学影像的弹性形变需求。后面会写一篇解释弹性变形方法的短文。

wh_xia_jun的专栏 779

关于mongodb的MongoTemplate调用方法导致栈溢出的原因

关于mongodb的MongoTemplate调用方法导致栈溢出的原因

qq_22368681的博客 817

绕过卡巴斯基通过RPC控制lsass注入DLL

参考国外的XPN以及3gstudent大佬的文章: https://blog.csdn.net/xiangshen1990/article/details/104872566 https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0 原理:正常的ssp扩展(dll)可以加载到lsass进程中去,比如kerberos验证都是通...

2ed 3524

eureka 服务名不能带下划线_ 否则gateway路由转发会找不到服务从而报nullpointer

首先,甩上报错信息。 java.lang.NullPointerException: null at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936) ~[na:1.8.0_171] at java.util.concurrent.ConcurrentHashMap.contai...

tiancaijunm的博客 2374

47、利用组策略配置 Windows 防火墙与 IPsec 全解析

本文深入解析了如何利用组策略配置Windows防火墙与IPsec,涵盖防火墙规则基础、IPsec身份验证与加密机制、服务器和域隔离实现方法、WFAS中新旧IPsec规则的区别与配置流程,并详细说明了防火墙属性与规则的优先级计算方式。同时介绍了证书服务、EFS等未详述的安全功能及相关学习资源,帮助管理员通过组策略有效提升网络安全性。

onion的博客 101

【AI Agent】Hermes Agent解析

Hermes Agent:一个具备持久化学习能力的开源AI Agent框架 核心特点: 突破传统Agent的"无状态困境",通过记忆系统(SQLite+FTS5全文检索)实现跨会话经验积累 支持200+模型自由切换,11种模型家族和15+平台接入 五层架构设计(入口层、编排层、推理层、工具执行层、存储层)实现平台无关性 47+内置工具和动态技能沉淀机制,支持从任务执行中自动提炼可复用Skill 独特的四层记忆体系(会话/每日/长期/向量索引)和辩证式用户建模 与传统Agent对比: 具备自我进化能力,通过A

sysu_lluozh 928

JDK源码解析 - java.util.concurrent.ConcurrentHashMap

分析这个类前,补充一些相关的基本常识 HashMap:JDK8以前是头插法,JDK8后是尾插法 HashMap扩容时,可能会导致死循环: 如果两个线程同时触发扩容,在移动节点时会导致一个链表中的2个节点相互引用,从而生成环链表 原因,反正我没看懂 ConcurrentHashMap的扩容实现: 当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作:如果新增节点之后,...

阶前空雨 593

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

java.util.concurrent包

本文是我们学院课程中名为Java Concurrency Essentials的一部分 。 在本课程中,您将深入探讨并发的魔力。 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之类的概念。 在这里查看 ! 目录 1.简介 2. java.util.concurrent 2.1。 执行者 2.2。 执行器服务 2.3。 并发集合 ...

最佳 Java 编程 961

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

032_java.util.concurrent.ConcurrentHashMap

ConcurrentHashMap是HashMap的线程安全版本,数据结构与HashMap一致。针对桶数据的put将会使用cas进行预先占位,存在桶数据则使用sychronized锁住。在扩容阶段,并发线程会帮助一起搬迁数据,该逻辑较为复杂。

吃饭睡觉打豆豆 855

java的JDK源码阅读顺序整理笔记

很多java开发的小伙伴都会阅读jdk源码,然而确不知道应该从哪读起。以下为小编整理的通常所需阅读的源码范围。 标题为包名,后面序号为优先级1-4,优先级递减 文章目录 1、java.lang 2、java.util 3、java.util.concurrent 4、java.util.concurrent.atomic 5、java.lang.reflect 6、java.lang.annotation 7、java.util.concurrent.locks

宜春 1952

java.util.concurrent包下的并发容器

一、简述 不考虑多线程并发的情况下,容器类一般使用ArrayList、HashMap等线程不安全的类,效率更高。并发场景,常用到ConcurrentHashMap、ArrayBlockingQueue等线程安全的容器类,虽然牺牲了一些效率,但却得到了安全。 #二、java.util.concurrent包下的线程安全容器 ConcurrentHashMap:并发版HashMap CopyOnWriteArrayList:并发版ArrayList CopyOnWriteArraySet:并发Set Conc

ChineseSoftware的博客 506

java.util.concurrent.ConcurrentHashMap深度解析

java.util.concurrent.ConcurrentHashMap<K,V> JDK1.8 本文的分析的源码是JDK8的版本,与JDK6的版本有很大的差异。实现线程安全的思想也已经完全变了,它摒弃了Segment(锁段)的概念,而是启用了一种全新的方式实现,利用CAS算法。它沿用了与它同时期的HashMap版本的思想,底层依然由“数组”+链表+红黑树的方式思想,大于8个转换为红黑树。默认初始大小16,负载因子也是0.75,定位元素的方法也是先hashCode(),再无符号右移16位异或

zikai_liang的博客 1181

java.util.concurrent.ConcurrentHashMap源码分析(JDK1.8)

一、引言 ConcurrentHashMap是Java并发工具包中的Map实现类,它支持多个线程并发操作Map。可以说,ConcurrentHashMap就是支持并发操作的HashMap。和HashMap不同的是,ConcurrentHashMap不支持添加键或值为null的键值对。 ConcurrentHashMap继承关系及其内部类继承关系图(红色部分为内部类): ConcurrentHas...

APlus 847

【java.util.Concurrent包】ConcurrentHashMap详解及源码解析

最近一次面试被问到ConcurrentHashMap原理,segment的数据结构,以及为什么可以保证并发下的效率(相比HashTable直接加锁),虽然知道利用的分段锁技术,但是具体的不是很清楚。 一、背景: 线程不安全的HashMap     因为多线程环境下,使用Hashmap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。   效...

weixin_38035852的博客 2252

JDK1.8 ConcurrentHashMap 源码解析

概述 ConcurrentHashMap 是 util.concurrent 包的重要成员。 ConcurrentHashMap 的源代码会涉及到散列算法,链表数据结构和红黑树 Java8 ConcurrentHashMap 源码真心不简单,最难的在于扩容,数据迁移操作不容易看懂。 前面我画了几张图, 便于理解. 剩下的需要你自己静下新来,安心看源码. 建议从 put 方法开...

张伯毅的专栏 1295

JDK源码(1)-阅读指引

说在最前面的话: 其实JDK源码的阅读,网上资料特别多,我阅读的最主要目的是自己学习,所以我读的可能不那么好,我的角度是从源码和源码对应的注释读起,顺便还能练练英语。 接下来准备对JDK的常见源码进行一下阅读,特整理一个学习指南出来供大家参考: 一、准备工作 以JDK1.8版本进行阅读。我下载的是比较新的jdk8u版本。 源码下载地址:http://hg.openjdk.java.net...

十步杀一人-千里不留行 1845

图解java.util.concurrent并发包源码系列——深入理解ConcurrentHashMap并发容器,看完薪水涨一千

ConcurrentHashMap是java.util.concurrent提供的一个并发安全的容器,可以实现高并发场景下读写的并发安全的同时兼顾了性能。它是HashMap的加强版,是并发安全的HashMap。ConcurrentHashMap是基于HashMap的扩展,所以可以先简单回顾一下HashMap。HashMap是一个存储键值对(key-value)的容器,往容器中放入元素要指定对应的key,往容器中获取元素前,通过指定key来获取对应的value。

weixin_43889578的博客 645

concurrenthashmap是什么锁_JDK1.8 util-concurrent-ConcurrentHashMap源码分析

在介绍ConcurrentHashMap源码之前,很有必要复习下java并发编程中的一些基础知识,比如内存模型等。存储模型并发编程中的三个概念1、原子性2、可见性3、重排序对HashMap在jdk8有所了解对CAS有所了解对内置锁和显示锁等有所了解jdk8对ConcurrentHashMap做了很大的调整,首先因为HashMap在jdk8已经做了数据结构上的优化,增加了红黑树,详情可以参考我之前的...

weixin_29543939的博客 208

JAVA源码导读

JAVA源码导读 源码阅读顺序,java篇 转载:https://blog.csdn.net/qq_21033663/article/details/79571506 1、java.lang 1) Object 1 wait(), notify(), notifyAll(), wait(timeout), hashCode(), equals(), clone() 2) String 1 ch...

backstreetBoy1的博客 369

java.util.concurrent源码包的结构

打算看一下concurrent包的源码,通过java并发编程的艺术这本书,大致将concurrent包分为五个模块 1. Aomic数据类型 这部分都被放在java.util.concurrent.atomic这个包里面,实现了原子化操作的数据类型,包括Boolean,Integer,Long, 和Referrence这四种类型以及这四种类型的数组类型。 2. 锁 这部分都被放在ja...

zy345293721的博客 305

java.util.concurrent 之ConcurrentHashMap 源码分析

转 http://zhxing.iteye.com/blog/977348   最近有点想研究下java.util.concurrent 包下的一些类中的实现,在现实中也对这包里的类应用不少,但都没怎么去深入理解,只是听说里面的实现在高并发中有不错的性能。。接下将对里面的几个比较常用的类的源码进行分析。。      ConcurrentHashMap类    研究源码时,我一般喜欢

fendou4533的专栏 1182
上一篇: java.util.concurrent.ConcurrentHashMap源码学习(三)
下一篇: java.util.concurrent.LinkedBlockingDeque源码学习(一)
windcpp
博客等级 码龄19年 0粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值