当前位置: 首页 > news >正文

Java面试题:ConcurrentHashMap

ConcurrentHashMap

一种线程安全的高效Map集合

jdk1.7之前

底层采用分段的数组+链表实现

请添加图片描述

一个不可扩容的数组:segment[]

数组中的每个元素都对应一个HashEntry数组用以存放数据

当放入数据时,根据key的哈希值找到对应的segment数组下标

找到下标后就会添加一个reentrantlock来上锁

并发情况下,多个线程使用cas的方式来尝试获取锁

同时只有一个线程来操作HashEntry数组的数据

每次上锁锁住整个HashEntry数组

性能较低,但线程安全

jdk1.8之后

底层采用数据结构和HashMap一样,数组加链表/红黑树的结构

放弃了segment的设计

底层采用了CAS+Synchronized的方式来保证并发的安全问题

CAS来控制节点的添加,同一时间只能添加一个数据

Synchronized锁定链表和红黑树的头结点,只要hash不冲突,就不会产生并发问题,提升效率

一个下标下的头结点被锁住不会影响其他的下标

每次只锁住一颗树/链表

影响范围小,分段锁精度更好,性能更好

http://www.lryc.cn/news/349032.html

相关文章:

  • 现在闪侠惠递寄快递有福利了,千万不要因没把握住而后悔呀!
  • vue+ant-design+formBuiler表单构建器——技能提升——form design——亲测有效
  • Git 如何管理标签命令(tag)
  • 零样本身份保持:ID-Animator引领个性化视频生成技术新前沿
  • 在Go语言中,可以这样使用Json
  • React useEffect Hook: 理解和解决组件双重渲染问题
  • 【C语言】—— 动态内存管理
  • Oracle到PostgreSQL的不停机数据库迁移
  • OpenAI 发布新款大型语言模型 GPT-4o,带大家了解最新ChatGPT动态。
  • 网络编程套接字(一) 【简单的Udp网络程序】
  • 【CANoe】CAPL中生成报告常用的测试函数
  • WEB后端复习——MVC、SSM【含登录页面代码】
  • 灵卡科技HDMI音视频采集及H.264编码一体化采集卡—LCC260
  • 智能自助终端主板RK3288/RK3568在酒店前台自助机方案的应用,支持鸿蒙,支持免费定制
  • Visual Studio环境搭载
  • 添砖Java之路(其八)——继承,final关键字
  • 一篇详解Git版本控制工具
  • 谷歌邮箱2024最新注册教程
  • Spring事务深度解析
  • 机器学习周报第41周
  • gin框架学习笔记(三) ——路由请求与相关参数
  • HTML常用标签-多媒体标签(图片、音频、视频)
  • Flutter 中的 AnimatedIcon 小部件:全面指南
  • 0510Goods的Maven项目
  • 使用Pyramid、Mako和PyJade生成 HTML
  • 什么是Facebook付费广告营销?
  • 面对.halo勒索病毒,如何有效防范与应对?
  • JSON 转为json串后出现 “$ref“
  • Nachi那智不二越机器人维修技术合集
  • C++类与对象基础探秘系列(二)