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

java.util.concurrent.ConcurrentHashMap:

ConcurrentHashMap是支持高并发、高吞吐量的线程安全的HashMap实现。它允许多个修改操作并发进行,关键在于使用了多个锁来控制对hash表的不同部分(Segment)进行的修改。每个段是一个小的hash table,有自己的锁,只要修改操作发生在不同的段上,就可以并发进行。在执行跨段的操作时首先尝试在不锁定整个map的情况下进行操作,不成功后再锁定整个map。key和value都不能为null。

ConcurrentHashMap中的重要字段:

1. int DEFAULT_INITIAL_CAPACITY
默认初始容量。这个容量会均匀分布到每个Segment中,即每一段的小hash table的容量是一样的。

2. float DEFAULT_LOAD_FACTOR
默认装载因子。每个段的装载因子。

3. int DEFAULT_CONCURRENCY_LEVEL
默认的并发级别。段的个数(也就是segments数组的大小)要大于这个值,而且要是2的n次方。

4. int MAXIMUM_CAPACITY
ConcurrentHashMap的最大容量。初始容量不能大于这个值。

5. int MAX_SEGMENTS
段个数的最大值。并发级别的值concurrencyLevel不能大于这个数。

6. int RETRIES_BEFORE_LOCK
跨段操作时(如size()和containsValue()),检测到数据不一致,锁定整个map前,重新尝试的次数。

7. Segment<K,V>[] segments
存放段(Segment)的数组


ConcurrentHashMap的构造函数:

1. ConcurrentHashMap()
2. ConcurrentHashMap(int initialCapacity)
3. ConcurrentHashMap(int initialCapacity, float loadFactor)
4. ConcurrentHashMap(int initialCapacity, float loadFactor, int concurrencyLevel)
5. ConcurrentHashMap(Map<? extends K, ? extends V> m)
进行构造时,利用指定的initialCapacity、loadFactor、concurrencyLevel生成segments数组,数组的大小是2的n次方且大于concurrencyLevel,数组中每个段Segment的初始容量和装载因子由initialCapacity、loadFactor来确定。
大模型-CLIP 详细介绍 最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。 阅读详情

相关推荐

避坑指南:微信小程序蓝牙广播在iOS上的那些‘坑’(附serviceUuids传值解决方案)

本文深入解析微信小程序蓝牙广播在iOS平台上的开发难点,特别是`serviceUuids`传值解决方案。通过对比iOS与安卓的蓝牙协议实现差异,提供实战编码策略和硬件端配合方案,帮助开发者有效规避兼容性问题,提升蓝牙外围设备开发效率。

weixin_30316097的博客 423

java.util.concurrent.ConcurrentHashMap 详解

ConcurrentHashMap ConcurrentHashMap使用的是分段锁技术,将ConcurrentHashMap将锁一段一段的存储,然后给每一段数据配一把锁(segment),当一个线程占用一把锁(segment)访问其中一段数据的时候,其他段的数据也能被其它的线程访问,默认分配16个segment。默认比Hashtable效率提高16倍。 ConcurrentHashMap是Map的一种并发实现,在该类中元素的read操作都是无锁了,而write操作需要被同步。这非常适合于读操作远大于写操作

花木兰 1910

【墨者学院 】uWSGI 漏洞复现(CVE-2018-7490)

0x01 漏洞详情 uWSGI是一款Web应用程序服务器,它实现了WSGI、uwsgi和http等协议。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_ROOT检测。攻击者可通过发送带有‘…’序列的特制URL请求利用该漏洞查看系统上的任意文件。 uWSGI 2.0.17之前版本中存在路径遍历漏洞,该漏洞源于程序没有正确的处理DOCUMENT_RO...

Summer's blog 1万+

java.util.concurrent.ConcurrentHashMap并发哈希表源码解析

1.为什么使用ConcurrentHashMap (1)HashMap是线程不安全的:我们知道HashMap实际上封装了一个Entry单链表来维护冲突值,但是如果单线程访问,那么通过键找到索引,再通过索引计算hash值找到这个单向节点链,然后遍历到节点的后继为null,就可以结束循环遍历了。但是在多线程访问的情况下,可能一个线程已经遍历到节点的后继为null了,其他线程继续往节点链里面插入数据,

sunpy 3132

非线性功率放大器对QAM传输BER性能的影响及补偿

1、线性功率放大器对传输性能的影响 为表述非线性功率放大器对传输性能的影响,以Saleh模型进行观察。具体来说,在QAM调制器之后添加一个非线性模块,使调制后的波形经历AM / AM和AM / PM转换。 在Saleh模型中,转换用四个参数表示,即AM / AM转换为????a和????a,AM / PM转换为????p和????p。 在Saleh模型中,AM / AM和AM / PM方程以输入电压u的大小表示为: 式中,FAM / AM是AM / AM转换的输出电压与输入电压的关系,而FAM

太阳帅帅的博客 2080

VSCode 1.85便携版安装与配置:解决远程服务器glibc版本过低报错的保姆级指南

本文详细介绍了如何通过VSCode 1.85便携版解决远程服务器glibc版本过低导致的兼容性问题。通过环境隔离和版本固化的方法,开发者可以在老旧服务器上稳定运行Remote-SSH插件,同时保留主力VSCode的配置。文章提供了从下载安装到深度配置的完整指南,帮助用户快速搭建稳定的开发环境。

weixin_30279315的博客 576

java.util.concurrent.ConcurrentHashMap

定义         public class ConcurrentHashMap         extendsAbstractMap         implements ConcurrentMap, Serializable         支持获取的完全并发和更新的所期望可调整并发的哈希表。此类遵守与 Hashtable相同的功能规范,并且包括对应于Hashtable的每个方法的方

知行流浪 4919

Windows11下QGIS 3.34.4安装Geo-SAM插件全流程(附RTX3060 CUDA12.0配置技巧)

本文详细介绍了在Windows 11系统中为QGIS 3.34.4安装和配置Geo-SAM插件的完整流程,特别针对RTX 3060显卡用户提供了CUDA 12.0与PyTorch环境的精准搭建方案。通过预编码与交互式分割两大核心步骤,该插件能显著提升遥感图像半自动标注的效率,降低硬件门槛,是地理信息处理领域融合AI技术的实用指南。

weixin_29089057的博客 296

JAVA源代码-java.util.concurrent 包--ConcurrentHashMap

java.util.concurrent包下有众多的线程安全类实现包括:ConcurrentHashMap、ArrayBlockingQueue、ConcurrentLinkedQueue、CopyOnWriteArrayList、ThreadPoolExecutor等等。今天我们来详细介绍ConcurrentHashMap & CopyOnWriteArrayList & Thr...

Terry_yuan的博客 414

椭圆 —— 从理论推导到最小二乘法拟合

前言 椭圆在高中数学里就开始提到,都是从标准方程开始如: x2a2+y2b2=1(a>b>0) \frac{x^2}{a^2}+\frac{y^2}{b^2}=1(a>b>0) a2x2​+b2y2​=1(a>b>0) 其中 aaa 为椭圆的长轴,bbb 为椭圆短轴。如长轴为 111 ,短轴为 0.50.50.5 的椭圆可以这样画出 ezplot('x^2/1^2 + y^2/0.5^2 = 1',[-1.5 1.5 -1 1]) grid on; 标准方程可以很方便

学徒浩子 2万+

【通信协议】GATT 与 BLE HID 工作原理详解

详细介绍BLE HID 跟GATT工作原理与两者的交互关系

以实战经验介绍行业知识 843

并发容器分析(五)--ConcurrentHashMap

一、简介     ConcurrentHashMap是Map的一种并发实现,在该类中元素的read操作都是无锁了,而write操作需要被同步。这非常适合于读操作远大于写操作的情况。在实现过程中,ConcurrentHashMap将所有元素分成了若干个segment,每个segment是独立的,在一个segment上加锁并不影响其他segment的操作。segment本身是一个hashtable,...

思过崖 348

Linux内核配置选项详解及编译过程

在内核编译完成后,可以通过重启系统并选择新编译的内核来使用它。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。可以选择需要的网络协议和功能,并根据需要启用或禁用相应的选项。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。

TechGlide的博客 746

java.util.concurrent包

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

最佳 Java 编程 961

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

032_java.util.concurrent.ConcurrentHashMap

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

吃饭睡觉打豆豆 855

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

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

ChineseSoftware的博客 506

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

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

阶前空雨 593

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

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

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

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值