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

java基础ConcurrentHashMap原理

参考文献:
ConcurrentHashMap源码分析(JDK8版本)
从ConcurrentHashMap的演进看Java多线程核心技术 由于该文来自个人博客所有备份了一份见: /Users/lww/教程/集合

探索 ConcurrentHashMap 高并发性的实现机制 由于该文来自个人博客所有备份了一份见: /Users/lww/教程/集合

对于put操作,如果Key对应的数组元素为null,则通过CAS操作将其设置为当前值。如果Key对应的数组元素(也即链表表头或者树的根元素)不为null,则对该元素使用synchronized关键字申请锁,然后进行操作。如果该put操作使得当前链表长度超过一定阈值,则将该链表转换为树,从而提高寻址效率。由于寻址效率提高了则不需要用分段锁来提高读写效率了,所有jdk8就去掉了分段锁。我猜只是在改版链表或者(红黑树)结构的时候才需要同步,这样这种情况下才需要考虑读操作同步即下面一段文档所说的事情。 对于读操作,由于entry[]被volatile关键字修饰,因此不用担心数组的可见性问题。同时每个元素是一个Node实例(Java 7中每个元素是一个HashEntry),它的Key值和hash值都由final修饰,不可变更,无须关心它们被修改后的可见性问题。而其Value及对下一个元素的引用由volatile修饰,可见性也有保障。

转载于:https://juejin.im/post/5a6f55b7f265da3e33049b11

相关文章:

  • 常用正则表达式
  • tensorflow学习笔记3——MNIST应用篇
  • Java 注解 (Annotation)你可以这样学
  • LCD常用接口原理【转】
  • python发送微信
  • 关于ios下字体描边的一个细节
  • tkinter学习系列(二)之窗口的设置
  • 多年父子成兄弟
  • p2519 [HAOI2011]problem a
  • SQL Server 变更数据捕获(CDC)监控表数据
  • java写文件实现换行
  • mount --bind使用方法
  • react 项目中 引入 bootstrap
  • “Usage of API documented as @since 1.8+”报错的解决办法
  • 【Spring系列】spring mvc整合任务调度
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 2017-08-04 前端日报
  • 30秒的PHP代码片段(1)数组 - Array
  • Django 博客开发教程 16 - 统计文章阅读量
  • ES6 学习笔记(一)let,const和解构赋值
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • ES6语法详解(一)
  • interface和setter,getter
  • Java 网络编程(2):UDP 的使用
  • JAVA 学习IO流
  • javascript 总结(常用工具类的封装)
  • Laravel5.4 Queues队列学习
  • Octave 入门
  • php ci框架整合银盛支付
  • Vue.js 移动端适配之 vw 解决方案
  • 关于 Cirru Editor 存储格式
  • 官方解决所有 npm 全局安装权限问题
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 巧用 TypeScript (一)
  • 深入浅出webpack学习(1)--核心概念
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 携程小程序初体验
  • 写给高年级小学生看的《Bash 指南》
  • 优化 Vue 项目编译文件大小
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • “十年磨一剑”--有赞的HBase平台实践和应用之路 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • #《AI中文版》V3 第 1 章 概述
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $.ajax()参数及用法
  • (33)STM32——485实验笔记
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (二)pulsar安装在独立的docker中,python测试
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程