ConcurrentHashMap源码解析

1.介绍一下ConcurrentHashMap?

concurrentHashMap是一个线程安全的集合,在HashMap基础上进行了优化,在JDK1.7中,ConcurrentHashMap由一个个的Segment组成,每个Segment就是一个类似于HashMap的结构,每个Segement可以单独上锁,因此ConcurrentHashMap的最大并发度就是segment的个数,当插入元素时候,要先获得segment锁。

构造方法有哪些?

无参构造方法ConcurrentHashMap()中调用有参构造方法,传入参数是初始容量,负载因子,默认并发级别16,然后会检验相关的传入的参数;检验并发级别的大小,如果大于2^16次方,则重置为2^16,否则会将并发级别变为最近的2的幂次方值,最后初始化segmet[0],默认为2

讲讲put方法?

首先计算Key的哈希值,通过哈希值定位到segment,然后通过tryLock()获取锁,再次通过哈希值定位到segment中的数组中位置,如果该位置的HashEntry不存在,如果HashEntry容量大于扩容阈值,并且小于最大阈值,那么进行扩容,然后通过头插入插入;如果该位置的HashEntry存在,那么比较该key和hash是否和put的key和hash是否一致,如果一致就替换,否则遍历下一个节点,如果都不一致,那么直接在链表头部插入,最后释放锁。

讲讲get方法?

首先计算key的哈希值,通过该hash值定位到Segment对象,再次通过hash值定位到Segment中HashEntry位置,然后遍历链表,找到相同的key的value。

JDK1.8的ConcurrentHashMap进行了哪些改进?

与JDK1.7相比,ConcurrentHashMap由Node数组,链表和红黑树组成,当链表长度达到8并且数组长度>=64,就会转换成红黑树。同时在JDK1.8中,不再是以Segment为锁,而是以链表或者红黑树的头节点为锁。

JDK1.8的put方法,

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626575.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网络文件共享服务 FTP

一、存储类型 存储类型分为三种 直连式存储:Direct-Attached Storage,简称DAS 存储区域网络:Storage Area Network,简称SAN(可以使用空间,管理也是你来管理) 网络附加存储:Network…

model introduction

文章目录 前言一、传统机器学习方法1、基于规则的模型2、基于概率的模型3、基于几何学的模型4、基于统计的模型 二、深度学习方法1、Feed-Forward Neural Networks(前馈神经网络)2. RNN-Based Models(基于循环神经网络的模型)3. C…

日志配置(OpenFeign)

日志级别 NONE: 不记录任何日志(默认值)BASIC:仅记录请求方法、URL、应答状态码、执行时间HEADERS: 在BASIC的基础上,记录请求和应答的headerFULL: 记录请求和应答的header、body、元数据 修改级别 配置类配置文件 …

精心挑选免费好用的api,推荐给大家

企业基本信息:通过公司名称/公司ID/注册号或社会统一信用代码获取企业基本信息,企业基本信息包括公司名称或ID、类型、成立日期、经营状态、注册资本、法人、工商注册号、统一社会信用代码、组织机构代码、纳税人识别号等字段信息。 AI绘画-Stable Diff…

当代大学生是怎么被废掉的?

中式教育以应试为核心,强调知识的灌输和学生被动接受。随着社会的发展,中式教育的短板逐渐显现,创新能力的缺乏、对记忆的过度依赖、忽视个体差异等问题日益突出。 建议所有大学生都能去看看《上海交通大学生存手册》,它道出了中…

Flutter首页框架搭建

1.下载flutter 2. 安装android 3.配置环境变量 关于环境搭建部分,哪天写一下,日志杂乱无章。 打开android studio 新建项目,选择flutter 新建文件夹创建 navigator和pages 文件夹下分别创建文件,tab_navigator.dart&#xff…

【Android Gradle 插件】Android 依赖管理 ① ( 依赖库匹配 | 依赖库查找顺序及路径 | Gradle 资源库 )

一、依赖库匹配 依赖库匹配 : 依赖库由三部分组成 依赖库分组依赖库名称依赖库版本号 只有三者都对上 , 依赖库才能匹配上 , 如 dependencies {implementation androidx.appcompat:appcompat:1.3.1 }依赖库分组为 androidx.appcompat , 依赖库名称为 appcompat , 依赖库版本…

云厂商不能花钱当老六

1. 愤怒的国产“三大废物” 12月份的时候,某中立市场分析公司发表了它们的行业分析“刀乐象现”。透过各种浮躁的“领导、远见”之后,大致意思就是: A是老大;我没意见;A是老二;我也没意见。咕咕咕咯咯咯哒是…

深入理解 PyTorch 激活函数:从基础到高效实用技巧(3)

目录 torch.nn.functional激活层详解 logsigmoid 1. 函数用途 2. 参数详解 3. LogSigmoid函数的定义及数学解释 4. 使用示例 hardshrink 1. 函数用途 2. 参数详解 3. Hardshrink函数的定义及数学解释 4. 使用示例 tanhshrink 1. 函数用途 2. 参数详解 3. Tanhsh…

Spring Boot 中实现定时任务(quartz)功能实战

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

电脑锁屏时间怎么设置?跟着这篇教程轻松搞定

在现代社会,我们使用电脑的时间越来越长,为了保护个人隐私和确保信息安全,设置电脑锁屏时间成为一项重要的操作。可是电脑锁屏时间怎么设置呢?本文将介绍三种常见的方法,详细解释如何设置电脑的锁屏时间,以…

Framework定制-在JAVA核心库中移植Android Log

在java核心库中,由于无法导入android的包,要想使用Log,最粗暴的方式就是用反射调用,还有一种方式就是移植Android的Log到java核心库中。 具体实现如下: 创建JLog.java aosp/libcore/ojluni/src/main/java/java/lang…

openssl3.2 - EVP_MD_fetch算法名称字符串(参数2)的有效值列表

文章目录 openssl3.2 - EVP_MD_fetch算法名称字符串(参数2)的有效值列表概述笔记注释版的摘要算法名称列表END openssl3.2 - EVP_MD_fetch算法名称字符串(参数2)的有效值列表 概述 使用摘要算法时, 官方demo都是使用EVP_MD_fetch(), API参数2要指定算法名称字符串. 如下: in…

MySQL 常用字符串函数 SUBSTRING_INDEX、SUBSTRING、LOCATE 和 LENGTH

在 MySQL 中,SUBSTRING_INDEX、SUBSTRING、LOCATE 和 LENGTH 是字符串处理的一些常用函数。下面是它们的基本用法: SUBSTRING_INDEX SUBSTRING_INDEX(str, delim, count) 用于返回字符串 str 中由分隔符 delim 分隔的子字符串。count 参数指定要返回的…

TDengine 如何进行数据建模

小 T 导读:在使用 TDengine 的时候,通过官网的技术文档可以学习到建库(database)、建表(table)的各种 SQL 语句,但是一旦要跟自己的具体业务场景结合,经验不足的朋友可能会不知道到底…

指针及其应用

1.定义 指针:也是一个变量,存放所指变量的地址,根据变量定义的不同,指针指向的类型也不同 注意:*是与前面类型一体的 int main(void) {int* p; //等价于int *p;//为了区分变量,C语言中一般将*放置于变量…

国产开源数据库进入生态发展期

作为基础软件“三驾马车”之一,数据库是支撑信息系统安全稳定运行的重要保障。记者从日前在京举行的openGauss Summit 2023获悉,2023年国产数据库openGauss系新增市场份额达21.9%,标志着openGauss已跨越生态拐点,这对于保障数据安…

.NET 8.0 发布到 IIS

如何在IIS(Internet信息服务)上发布ASP.NET Core 8? 在本文中,我假设您的 Windows Server IIS 上已经有一个应用程序池。 按照步骤了解在 IIS 环境下发布 ASP.NET Core 8 应用程序的技巧。 您需要设置代码以支持 IIS 并将项目配…

智算让大模型触手可及

本文整理自2023年 12 月 20 日举办的「2023 百度云智大会智算大会」主论坛,百度智能云 AI 与大数据平台总经理忻舟的主题演讲《智算让大模型触手可及》。 在之前极客公园举办的创新大会上,百度集团董事长兼 CEO 李彦宏先生提到:卷 AI 原生应用…

【Linux】各目录说明

【常见目录说明】 目录 /bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。 /etc 存放系统管理和配置文件 /home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以…