ConcurrentHashMap1.8总结

2023-11-10

Java8 ConcurrentHashMap结构基本上和Java8的HashMap一样,不过保证线程安全性。

在JDK8中ConcurrentHashMap的结构,由于引入了红黑树,使得ConcurrentHashMap的实现非常复杂,我们都知道,红黑树是一种性能非常好的二叉查找树,其查找性能为O(logN),但是其实现过程也非常复杂,而且可读性也非常差,DougLea的思维能力确实不是一般人能比的,早期完全采用链表结构时Map的查找时间复杂度为O(N),JDK8中ConcurrentHashMap在链表的长度大于某个阈值的时候会将链表转换成红黑树进一步提高其查找性能。

总结

其实可以看出JDK1.8版本的ConcurrentHashMap的数据结构已经接近HashMap,相对而言,ConcurrentHashMap只是增加了同步的操作来控制并发,从JDK1.7版本的ReentrantLock+Segment+HashEntry,到JDK1.8版本中synchronized+CAS+HashEntry+红黑树。

1.数据结构:取消了Segment分段锁的数据结构,取而代之的是数组+链表+红黑树的结构。2.保证线程安全机制:JDK1.7采用segment的分段锁机制实现线程安全,其中segment继承自ReentrantLock。JDK1.8采用CAS+Synchronized保证线程安全。3.锁的粒度:原来是对需要进行数据操作的Segment加锁,现调整为对每个数组元素加锁(Node)。4.链表转化为红黑树:定位结点的hash算法简化会带来弊端,Hash冲突加剧,因此在链表节点数量大于8时,会将链表转化为红黑树进行存储。5.查询时间复杂度:从原来的遍历链表O(n),变成遍历红黑树O(logN)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ConcurrentHashMap1.8总结 的相关文章

  • HashMap底层原理分析(结合面试问题分析)

    1 为什么HashMap底层数组的容量总是2的幂次方 答 因为hashmap的底层在计算一个entry存放在数组中的索引值的时候 采用哈希值运算 如果经过哈希算法得到的一个哈希值h的后面的二进制表示为 0101 0101 此时的数组的长度l
  • Java基础系列30-单列 Collection集合

    文章目录 一 集合的概述 1 1 为什么会出现集合类 1 2 集合类体系结构图 二 Collection集合 2 1 Collection集合入门 2 2 Collection集合的成员方法 2 3 Collection集合的遍历 2 4
  • Map之TreeMap

    我们先不谈TreeMap我们来直接聊聊HashMap 首先当我们用HashMap存储数据的时候 我们要如何将给出的数据排序呢 这是一个问题 那么TreeMap本身是支持排序的 是对key进行的排序 但是需要用户定义 实现排序 主要有两种方法
  • 【面试八股文】每日一题:谈谈你对集合的理解

    每日一题 Java核心 谈谈你对集合的理解 面试八股文 谈谈你对集合的理解 Java集合是Java编程语言中用于存储数据的容器 它提供了一系列的类和接口 用于操作和管理数据集合 Java集合框架主要包括以下几个重要的接口和类 List Li
  • 并发容器(一):普通容器&&同步容器&&并发容器

    前言 之前我们学习过了集合 并发编程 现在我们来学习并发容器 在并发编程中 经常听到Java集合类 同步容器 并发容器 那么他们之间有哪些分类 优劣呢 我们先把这个框架给分清楚了 这样后面学习的时候不会乱 集合容器 大家熟知的集合类Arra
  • python 学习笔记07: set(集合)类型的操作

    coding UTF 8 version Python2 7 15 set gt 集合学习笔记 Help on class set in module builtin class set object set gt new empty se
  • Java中List集合(String类型)三种遍历的方法

    Java中List集合的 String类型 三种遍历的方法 程序代码 程序运行结果 程序代码 package homework09 homework0927 import java util ArrayList import java ut
  • Java Stream流操作

    Stream目录 一 概述 二 分类 三 具体用法 1 流的常用创建方法 1 1 使用Collection下的 stream 和 parallelStream 方法 1 2 使用Arrays 中的 stream 方法 将数组转成流 1 3
  • 公司职员薪水管理系统(List)

    集合初步完成下面的功能需求 做公司职员薪水管理系统 完成以下功能 1 当有新员工时 将加入该管理系统 2 根据员工号 显示该员工信息 3 可以显示所有员工的信息 4 可以修改员工的薪水 5 当员工离职时 从该系统中删除该员工 6 可以将员工
  • HashMap 和 Hashtable 的区别

    HashMap 和 Hashtable 的区别 线程是否安全 HashMap 是非线程安全的 HashTable 是线程安全的 因为 HashTable 内部的方法基本都经过synchronized 修饰 如果你要保证线程安全的话就使用 C
  • 千万不要这样使用Arrays.asList !

    作者 flyhero 微信公众号 码上实战 ID Push Code 使用Arrays asList 的原因无非是想将数组或一些元素转为集合 而你得到的集合并不一定是你想要的那个集合 而一开始asList的设计时用于打印数组而设计的 但jd
  • 关于Java集合的一些技巧

    需要唯一吗 需要 Set 需要指定顺序吗 需要 TreeSet 不需要 HashSet 但是想要一个和存储一致的顺序 有序 LinkedHashSet 不需要 List 需要频繁增删吗 需要 LinkedList 不需要 ArrayList
  • Java 集合之Collection

    首先我们看下Collection的结构图 从结构图上我们可以看到Collection集合下面有3个比较大的实现 Set List Queue在日常开放过程中我们比较常用的是Set与List 针对Queue我在之前的博客中也有所介绍 在这里不
  • Java中判断List集合中是否有重复元素的方法

    package cn tedu test import java util ArrayList import java util HashSet import java util List public class TestList pub
  • Map双列集合的四种遍历方式

    Map双列集合的四种遍历方式 第一种 键找值遍历方式 通过keySet 方法可以获取到所有键组成的Set集合 public Set
  • java集合UML类图 总览

    Java集合框架主要包括两种类型的容器 一种是集合 Collection 存储一个元素集合 Collection 接口又有 3 种子类型 List Set 和 Queue 另一种是图 Map 存储键 值对映射 Map 接口又有 Abstra
  • 阿里巴巴开发手册-集合处理

    强制 Map Set 的 key 为自定义对象时 必须重写 hashCode 和 equals 正例 String 重写了 hashCode 和 equals 方法 所以我们可以非常愉快地使用 String 对象作 为 key 来使用 强制
  • java.util之ArrayList使用

    java util之ArrayList使用 一 概述 ArrayList底层实际是通过一个数组来保存数据 其默认大小为10 扩容机制为新的容量 原始容量x3 2 1 允许空值 有序 为线程不安全 可以使用迭代器遍历 里面的的元素全部都是对象
  • Java集合的使用

    集合的使用 集合框架的概述 数组在存储多个数据的特点 数组在存储多个数据的缺点 Java 集合可分为 Collection 和 Map 两种体系 Collection接口 Map接口 Collection 接口的使用 说明 常用方法 案例一
  • 集合addAll方法使用存在的问题。

    集合addAll 方法的时候 这里里有两个集合 集合2要拿到集合1中的元素 然后对集合2进行removeAll方法 结果集合1中的值也没有了 只是因为listTwo listOne 只是把集合1的引用给了集合2 集合1和集合2的引用是指向同

随机推荐

  • 大数据时代的新星,图数据库究竟是什么?

    随着5G万物互联时代的到来 社交 电商 金融 物联网等行业织起了一张庞大而复杂的数据关系网 获得了新的发展空间 然而要想真正利用数据 获取越来越多 越来越复杂的关联数据中产生的业务价值 并非易事 为了应对大数据新时代的难题 工业界将越来越多
  • adb 通过wifi连接手机

    adb 通过wifi连接手机 1 电脑通过USB线连接手机 2 手机开启USB调试模式 开启手机开发者模式 3 手机开启USB调试模式 更多设置 开发者选项 USB调试 4 点击Wi Fi 高级设置 可以查看到手机Wi Fi的IP地址 此I
  • 微信小程序项目真机调试图片不显示处理

    微信开发者上图片显示 但在真机调试时不显示 查看数据库图片文件上传方式 如果是本地地址 改成网络地址即可 如图 查找ip网络地址方法 按windows R快捷键 输入CMD 输入ipconfig 复制IPv4地址192 168 0 2到上图
  • SQLite笔记-基本命令-c语言的使用

    一 数据库介绍 1 数据库的基本概念 数据 能够输入计算机并能被计算机程序识别和处理的信息集合 数据库 数据库是在数据库管理系统管理和控制之下 存放在存储介质上的数据集合 2 常用的数据库 1 大型数据库 1 oracle公司是最早开发数据
  • 软件测试的艺术(2)代码走查,检查与评审

    人工测试 代码检查 走查以及可用性测试是三种主要的人工测试方法 这种人工测试方法有点像是若干个人员坐在一起开 头脑风暴会 也就是说 目的是为了找出错误 而不是调试 优点 1 一旦发现错误 就能在代码中对其进行精准的定位 降低了调试的成本 2
  • Your account has been blocked

    Your account has been blocked 1 问题描述 GitLab Your account has been blocked fatal Could not read from remote repository 2
  • 【附源码】计算机毕业设计Python安卓基于Android的考勤管理系统hn24k(源码+程序+LW+调试部署)

    附源码 计算机毕业设计Python安卓基于Android的考勤管理系统hn24k 源码 程序 LW 调试部署 该项目含有源码 文档 程序 数据库 配套开发软件 软件安装教程 项目运行环境配置 Python3 7 7 Django Mysql
  • 解决!安装picgo插件Error: Cannot findmoduleC:\roaming\picgo\picgo-plugin-gitee-uploader\dist\index.js

    问题描述 本地安装以及picgo内在线安装该插件 均会报这个错误 我没有动过这个安装文件 但是每次它总会显示缺少index js 文件 Error Cannot find module C Users xueto AppData Roami
  • 【转】手把手走入Git开源世界

    原博文地址 https www cnblogs com objectjava p 5242542 html 我曾经一直想加入到开源项目中 但是因为没有人指导流程 网上看了很多 基本都是说了个大概 如果你也是一个初出茅庐的人 那么 我将以自己
  • 手把手教你在Windows 10,MacOS和Linux中安装TensorFlow 2-GPU版本,亲测有效(附相关安装下载资源)

    从0到1安装Tensorflow GPU版本 Windows版本TensorFlow GPU版本安装 1 要求 2 步骤 1 下载并安装显卡驱动 2 下载并安装Microsoft Visual Studio 3 下载并安装NVIDIA CU
  • Eclipse Indigo 3.7.2 安装Findbugs 3.0.0重启后找不到相关的菜单

    我通过Help gt Install New Software进行Findbugs插件安装 添加Findbugs插件地址 http findbugs cs umd edu eclipse 后 一直Next直到Finshed 然后安装完成后E
  • Kali Linux 2022修改Root用户密码(VirtualBox)

    1 启动Kali Liunx 进入开机启动页面 按键盘e键进入Kali GNU GRUB页面 2 进入Kali GNU GRUB页面 3 在Kali GNU GRUB页面 选择linux那一行 将ro 改为 rw 在此行末尾增加 init
  • Respons+生成随机验证码+详细代码 +重定向 +转发

    1 HTTP协议 响应消息 2 Response对象 3 ServletContext对象 HTTP协议 1 请求消息 客户端发送给服务器端的数据 数据格式 1 请求行 2 请求头 3 请求空行 4 请求体 2 响应消息 服务器端发送给客户
  • Kubernetes------YAML

    K8S YAML K8S 一 YAML语法格式 查看api 资源版本标签 二 写一个yaml文件demo 创建资源对象 deployment yaml文件详解 Pod yaml文件详解 Service yaml文件详解 Kubernetes
  • springMVC接收ajaxfileupload提交数据不执行success回调的问题解决

    采用ajaxfileupload插件提交表单 前端js写法如下 ajaxFileUpload url base submit ajaxfileupload do secureuri false fileElementId uploadFil
  • 正版方舟建服务器,搭建ARK服务器

    Loading 参考文章 CentOS 7 x 快速搭建ARK服务器 1 更新系统 yum update y 安装窗口会话工具 可以让你在退出ssh后保留当前运行的服务端 已安装或有其他工具的请跳过 yum install screen 安
  • ❀OSPF协议面试题总结❀

    文章目录 一 简单介绍下ospf 二 ospf的骨干区域有什么用 为什么要划分一个骨干区域 三 ospf的状态机 四 ospf的lsa有几种 五 ospf路由的生成过程 六 介绍ospf的虚链路 一 简单介绍下ospf 开放式最短路径优先协
  • 力扣2594.修车的最少时间

    题目描述 给你一个整数数组 ranks 表示一些机械工的 能力值 ranksi 是第 i 位机械工的能力值 能力值为 r 的机械工可以在 r n2 分钟内修好 n 辆车 同时给你一个整数 cars 表示总共需要修理的汽车数目 请你返回修理所
  • Android ApiDemos示例解析(87):Media->MediaPlayer

    本例介绍了如何使用MediaPlayer类来播放声音或是视频 涉及的Activity有三个 MediaPlayerDemo 主Activity 显示示例列表 MediaPlayerDemo Audio 子Activity 用于播放声音 在L
  • ConcurrentHashMap1.8总结

    Java8 ConcurrentHashMap结构基本上和Java8的HashMap一样 不过保证线程安全性 在JDK8中ConcurrentHashMap的结构 由于引入了红黑树 使得ConcurrentHashMap的实现非常复杂 我们