专栏首页Java Life请你说明一下ConcurrentHashMap的原理?

请你说明一下ConcurrentHashMap的原理?

01

ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEntry 用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接起来的链表。一个 ConcurrentHashMap 实例中包含由若干个 Segment 对象组成的数组。HashEntry 用来封装散列映射表中的键值对。在 HashEntry 类中,key,hash 和 next 域都被声明为 final 型,value 域被声明为 volatile 型。

在ConcurrentHashMap 中,在散列时如果产生“碰撞”,将采用“分离链接法”来处理“碰撞”:把“碰撞”的 HashEntry 对象链接成一个链表。由于 HashEntry 的 next 域为 final 型,所以新节点只能在链表的表头处插入。下图是在一个空桶中依次插入 A,B,C 三个 HashEntry 对象后的结构图:

图1. 插入三个节点后桶的结构示意图:

注意:由于只能在表头插入,所以链表中节点的顺序和插入的顺序相反。

Segment 类继承于 ReentrantLock 类,从而使得 Segment 对象能充当锁的角色。每个 Segment 对象用来守护其(成员对象 table 中)包含的若干个桶。

本文分享自微信公众号 - Java Life(gh_beea63cf3162)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 计算机科学领域的任何问题都可以通过增加一个间接的中间层来解决

    这句话几乎概括了计算机软件体系结构的设计要点.整个体系从上到下都是按照严格的层级结构设计的.

    一个会写诗的程序员
  • 未解决的编程题,我会一直想的,直到想到

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    张凝可
  • Machine Learning-算法汇总介绍

    之前一个一个讲还是有些零散而且更新的速度也慢,所以我还是打算先整理一波全部的算法,再逐一展开介绍比较好,原文来自Jason Brownlee 的文章《A Tou...

    Sam Gor
  • 面试中常用到机试题

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    张凝可
  • Spring与MongoDB

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

    张凝可
  • ML_Basic-特征预处理操作指南

    主要是删除原始数据集中无关的数据、重复的数据,平滑噪声数据,筛选掉与挖掘主题无关的数据,处理异常值缺失值等操作

    Sam Gor
  • 【图像分类】 关于图像分类中类别不平衡那些事

    欢迎大家来到图像分类专栏,类别不平衡时是很常见的问题,本文介绍了类别不平衡图像分类算法的发展现状,供大家参考学习。

    用户1508658
  • 等保2.0标准个人解读(二):安全通信网络

    本控制项和旧标准中的网络安全类似,主要关注网络架构通信传输及可信验证,相比较而言简化了一些,属于三重防护之一。

    FB客服
  • Okhttp3源码解析(1)-OkHttpClient分析

    上篇文章我们讲了Okhttp的基本用法,今天根据上节讲到请求流程来分析源码,那么第一步就是实例化OkHttpClient对象,所以我们今天主要分析下OkHttp...

    秦子帅
  • 算法学习|双指针

    微笑的小小刀

扫码关注云+社区

领取腾讯云代金券