看完这篇ConcurrentHashMap源码解析,我又觉得能手撕面试官了(上)

简介: 看完这篇ConcurrentHashMap源码解析,我又觉得能手撕面试官了(上)

0 前言

线程安全的 Map - ConcurrentHashMap,让我们一起研究和 HashMap 相比有何差异,为何能保证线程安全呢.

1 继承体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gkf7KyhC-1587048420294)(https://user-gold-cdn.xitu.io/2020/4/13/1716f691bd3ef39d “图片标题”)]

image.png与 HashMap 很相似,数组、链表结构几乎相同,都实现了 Map 接口,继承了 AbstractMap 抽象类,大多数的方法也都是相同的,ConcurrentHashMap 几乎包含 HashMap所有方法.


2 属性

bin数组.第一次插入时才延迟初始化.大小始终是2的幂.由迭代器直接访问.

image.png

下一个要用的 table;仅在扩容时非null

image.png

基本计数器值,主要在没有争用时使用,也用作table初始化竞争期间的反馈.通过CAS更新

image.png

table 初始化和扩容的控制

如果为负,则表将被初始化或扩容:

-1用于初始化

-N 活动的扩容线程数

否则,当table为null时,保留创建时要使用的初始表大小,或者默认为0.

初始化后,保留下一个要扩容表的元素计数值.

image.png

扩容时要拆分的下一个表索引(加1)

image.png

扩容和/或创建 CounterCell 时使用的自旋锁(通过CAS锁定)

image.png

Table of counter cells。 如果为非null,则大小为2的幂.

image.png

Node节点:保存key,value及key的hash值的数据结构,其中value和next都用volatile修饰,保证可见性

image.png

一个特殊的Node节点,转移节点的 hash 值都是 MOVED,-1.其中存储nextTable的引用.在transfer期间插入bin head的节点.只有table发生扩容的时候,ForwardingNode才会发挥作用,作为一个占位符放在table中表示当前节点为null或则已经被移动,

image.png

目录
相关文章
|
3天前
|
JavaScript 中间件 前端开发
[评论送书 ]手撕源码,实现一个Koa。,2024年最新学生会面试答题技巧
[评论送书 ]手撕源码,实现一个Koa。,2024年最新学生会面试答题技巧
|
3天前
|
数据安全/隐私保护 Python 算法
Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码,2024年最新Python面试回忆录
Python 蜻蜓fm有声书批量下载 支持账号登录 原创源码,2024年最新Python面试回忆录
|
3天前
|
前端开发 JavaScript 程序员
async-validator 源码学习(一):文档翻译,2024年最新如何面试大厂
async-validator 源码学习(一):文档翻译,2024年最新如何面试大厂
|
3天前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
10款精美的web前端源码的特效,2024年最新面试题+笔记+项目实战
|
3天前
|
移动开发 前端开发 JavaScript
10款精美的web前端源码的特效(1),头条前端面试节奏
10款精美的web前端源码的特效(1),头条前端面试节奏
|
3天前
|
前端开发 JavaScript
Web前端开发之面试题全解析 一,2024年最新面经牛客
Web前端开发之面试题全解析 一,2024年最新面经牛客
|
3天前
|
移动开发 前端开发 JavaScript
Web前端开发之面试题全解析 一(3),前端面试题背不下来怎么办
Web前端开发之面试题全解析 一(3),前端面试题背不下来怎么办
|
3天前
|
前端开发 算法 搜索推荐
Web前端开发之面试题全解析 一(1),2024年最新前端组件化面试
Web前端开发之面试题全解析 一(1),2024年最新前端组件化面试
|
3天前
|
Linux 网络安全
CentOS系统openssh-9,网络安全大厂面试真题解析大全
CentOS系统openssh-9,网络安全大厂面试真题解析大全
|
3天前
|
Linux 网络安全 Windows
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析
网络安全笔记-day8,DHCP部署_dhcp搭建部署,源码解析

推荐镜像

更多