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总结 的相关文章

  • 【List】类型检查

    public static
  • Java的List集合根据实体类的属性去重数据

    一 Stream流去重 创建一个包含DeptEntity对象的List 并向其中添加若干元素 List
  • C语言Link_List简单实现

    C语言Link List简单实现 不做线程控制 Link List h 作者 代浩然 时间 2017 8 2 该文件定义为非线性链表相关的实现 线性链表的特性 1 在内存中的存放地址是非连续的 随机分配 优点 1 由于地址的非连续性 所以我
  • JavaSE - 集合类-单列集合框架

    JavaSE 集合类 单列集合框架 本节学习目标 了解Java单列集合框架结构 了解并掌握Collection接口及其方法 了解并掌握List集合 接口 及其方法 了解并掌握Set集合 接口 及其方法 了解并掌握Queue集合 接口 及其方
  • Python基础篇(三)-- 列表、元组、字典、集合、字符串

    前面一篇简单介绍了Python的数据类型与运算符 这一节主要学习Python中5种常用序列结构 列表 元组 集合 字典和字符串的详细使用和一些技巧 下图概括了本篇的主要内容 1 序列 在数学上 序列也称数列 按一定顺序排列的数 程序设计中序
  • Java 集合(List与LinkedList)接口详解

    List接口 List接口的定义 List interface List extends Collection 通过观察List接口的定义发现其继承得是Collection接口 List Set Queue接口继承的都是Collection
  • 【JAVA练习-----集合API】练习ArrayList 集合、Iterator 迭代器、foreach循环、HashSet的使用。

    实验十四 在项目中使用集合API 一 实验目的 练习Java集合API的使用 二 实验内容 练习ArrayList 集合 Iterator 迭代器 foreach循环 HashSet的使用 实验步骤如下 一 有 2 个 ArrayList
  • 【面试八股文】每日一题:谈谈你对集合的理解

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

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

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

    Collection集合的整理 1 List Set Queue Map四者的区别 集合底层数据结构梳理 2 关于集合的的选用 2 1 为什么使用集合 3 List接口 3 1 ArrayList 和 Array 数组 的区别 3 1 Li
  • java中集合排序的常用方法总结

    前言 1 集合元素为数字 2 集合元素为对象 前言 平常的开发需求中肯定会遇到对集合排序问题 最常见的排序是在持久层中使用sql进行排序 但是由于业务限制或是其他原因 不能在持久层进行排序处理只能在逻辑层处理 那今天就来聊一下如何在逻辑层
  • HashMap 和 Hashtable 的区别

    HashMap 和 Hashtable 的区别 线程是否安全 HashMap 是非线程安全的 HashTable 是线程安全的 因为 HashTable 内部的方法基本都经过synchronized 修饰 如果你要保证线程安全的话就使用 C
  • Java之集合(15个demo)

    本节主要介绍java的集合 主要包括List Set和Map 其中List的子类ArrayList和LinkedList Set的子类HashSet和TreeSet Map的字类HashMap等 介绍了集合的常用方法 Collections
  • Map接口-HashMap、Hashtable和Properties

    1 Map 接口和常用方法 1 1Map 接口实现类的特点 很实用 注意 这里讲的是JDK8的Map接口特点 1 Map与Collection并列存在 用于保存具有映射关系的数据 Key Value Map 中的key 和 value可以是
  • 【2022最新Java面试宝典】—— Java集合面试题(52道含答案)

    目录 一 集合容器概述 1 什么是集合 2 集合的特点 3 集合和数组的区别 4 使用集合框架的好处 5 常用的集合类有哪些 6 List Set Map三者的区别 7 集合框架底层数据结构 8 哪些集合类是线程安全的 9 Java集合的快
  • 千万不要这样使用Arrays.asList !

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

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

随机推荐

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

    随着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的实现非常复杂 我们