ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ConcurrentHashMap底层源码分析

2022-05-14 16:01:20  阅读:9  来源: 互联网

标签:ConcurrentHashMap hashmap 多个 源码 线程 数组 Segment 底层


上文讲到了hashmap的底层源码分析,可以了解到hashmap是线程不安全的。比如在场景多个线程同时调用put方法,会出现将前一个值给覆盖的现象。

 

 在JDK1.7版本中,ConcurrentHashMap的数据结构是由一个Segment数组和多个HashEntry组成,主要实现原理是实现了锁分离的思路解决了多线程的安全问题。Segment数组的意义就是将一个大的table分割成多个小的table来进行加锁,也就是上面的提到的锁分离技术,而每一个Segment元素存储的是 HashEntry数组+链表,这个和HashMap的数据存储结构一样。 如下图所示:

                                   

 

为了保证线程安全,Segment继承了ReentrantLock。

 

 

当多个线程在创建Segment过程中,使用了多重判断以及cas来保证。

 

标签:ConcurrentHashMap,hashmap,多个,源码,线程,数组,Segment,底层
来源: https://www.cnblogs.com/wxynb/p/16270346.html

专注分享技术,共同学习,共同进步。侵权联系[admin#icode9.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有