`

(转)ConcurrentHashMap分段与锁的学习总结

    博客分类:
  • java
 
阅读更多

现阶段的学习策略是理解和实践这些知识点,并没有深入分析其原理,但确实精读了许多关于这个主题基础性的资料让我很受益(见参考资料)。

哈希表基础

1.哈希表是基于数组的数据结构

2.通过对关键字的哈希运算实现元素的快速定位

3.哈希表的重点是哈希化,哈希化负责把一个大范围的数字转化成一个小范围的数字

4.哈希化过程中会产生值冲突,这种情况有多种办法可以解决(开放地址法、链地址法)

4.1.开放地址法,通过在哈希表中寻找一个空位解决冲突问题,寻找空位的方法也有多种(线性探测、二次探测、再哈希)

4.2.链地址法,通过在哈希表单元中加入链表的方式解决

5.哈希表的重要缺点

5.1.当存储数组基本被填满时性能下降很高

5.2.对存储数组进行扩容会分别对已存储的元素重新计算哈希的过程

ConcurrentHashMap分段与锁的学习

一、结构

计算机生成了可选文字: Re创tlJltLOCkCollctlrrel成HasllMal)pot(V.K):voidqet(Objed):ObjectSegnlel成table:HashEotryCOUot:intmodCOUnt:iotthreshold:intIOadF台ctor:floatHasllEI成rykey:KValUe:Vh日Sh:intnext:HashE献ry+++out(booleanVintK、:V

 

二、定位分段

这块对Key的哈希值进行移位处理,首先给定的Key在哪一段,然后从具体段中定位Hash值对应具体值对象。

 

计算机生成了可选文字: pU山licVget(ObjectkeV){Se甲11en七<K,V>3;//功anuallyInteqrateacce33功ethodstoreduceoverheadHashEntry<K,V>[]ta为二inth=hash(keV)二10n叮u=(((h>>>se甲”entshl上七)'se甲们entHask)<<55月压F里)+5习月6E:1士((3=(Se甲”ent<K,V>)UNS月万万.getob〕ectV0latlle(seg加ents,u))!=null"(tab=5.t8JOle)!=null)(for(Ha3hEntry<K;V>e=(HashEntrV<K,V>】U钟5月万万.getobjectVolatile(七司〕,((lon叮)(((七。七.lenqth一1】‘h】】<<TS月匡万T)+TB月万万)二e!=null二e=e.next){Kk浮if((k,e.key)==keyl!(e.hash==h"key.equals(k)】)returne.value二}}returnnull二

 

三、锁

ConcurrentHashMap没有将每个方法都在同一个锁上同步并使得每次只能有一个线程访问容器,而是使用一种粒度更细的加锁机制实现更大程度的共享。这种细粒度的加锁机制体现在ConcurrentHashMap划分的Segment数组,Segment数组上各Segment元素代表了粒度更细的锁,从结构图中可以看到Segment继承自ReentrantLock可重入锁。

ConcurrentHashMap这种基于分组Segment并加锁的策略可在高并发的环境下获得更高的吞吐量。

ConcurrentHashMap实现并发的基础操作都通过sun.misc.Unsafe完成。

 

四、sun.misc.Unsafe

Unsafe类相关于一个工具类,低层调用native方法,提供了基础CompareAndSet(CAS)支持,通过CAS可以在不加锁并发情况下实现数字或引用的细粒度更新。

 

参考资料

1Wang/Jenkins Hash算法http://wangjunle23.blog.163.com/blog/static/11783817120138863910800

2、数据结构和算法2th

3、并发容器,http://www.blogjava.NET/xylz/archive/2010/07/20/326584.html

4UNSAFEhttp://blog.csdn.Net/aesop_wubo/article/details/7537278

5CAShttp://blog.csdn.net/aesop_wubo/article/details/7537960

6Java非阻塞,http://www.ibm.com/developerworks/cn/java/j-jtp04186/

 
 
 
 
REFS:http://blog.csdn.net/ybygjy/article/details/38530159
分享到:
评论

相关推荐

    ConcurrentHashMap源码剖析

    与传统的基于synchronized关键字实现线程安全的HashTable相比,ConcurrentHashMap通过采用锁分段技术显著提高了并发性能。本文将深入探讨ConcurrentHashMap的内部结构、工作原理及其在实际场景中的应用。 #### 二、...

    java 并发学习总结

    与`Hashtable`不同,`ConcurrentHashMap`不是通过全局锁来实现同步,而是采用分段锁策略,提高并发性能。此外,还有`ConcurrentLinkedQueue`、`CopyOnWriteArrayList`等,它们都设计为线程安全,减少了锁的使用,...

    Java锁的知识总结及实例代码共7页.pdf.zip

    例如,ConcurrentHashMap利用了分段锁实现高并发性能。 6. **线程安全的数据结构**:如ArrayList不是线程安全的,而Vector和CopyOnWriteArrayList是线程安全的。了解这些数据结构的线程安全性以及它们的适用场景至...

    Java面试总结,Redis宕机数据丢失解决方案,看完这篇彻底明白了.docx

    * ConcurrentHashMap使用分段锁来实现线程安全, 每个分段锁对应一个链表,通过hash函数将键映射到对应的分段锁上 3. Java垃圾回收算法和触发条件 * Java垃圾回收算法有标记-清除、标记-压缩、复制等多种,垃圾...

    Java中的几个HashMapConcurrentHash

    `ConcurrentHashMap`使用分段锁技术,将整个散列表分为多个段,每个段由一个独立的锁控制,这大大提高了并发性能。与`synchronized HashMap`相比,`ConcurrentHashMap`在高并发场景下通常表现更好,因为它可以允许多...

    java并发编程实践

    java并发编程实践这本教程深入讲解了Java并发编程的相关知识点。首先,它详细探讨了Java内存模型。...对于Java并发编程的学习和应用,是一个系统工程,需要理论与实践相结合,不断实践、总结和优化。

    阿里面试题目总结.pdf

    3. **集合框架**:HashMap的扩容机制是通过将容量翻倍并重新哈希来实现的,ConcurrentHashMap则采用分段锁策略来保证并发安全。 4. **JVM内存模型与GC**:了解堆内存、栈内存、方法区、本地方法栈等,以及GC的几种...

    Java-concurrentMap-内存模型深入分析-HotCode

    例如,`ConcurrentHashMap`使用了分段锁策略,每个段都是一个独立的`HashMap`,通过并发控制减少锁的粒度,提高并发性能。此外,JMM的volatile关键字在`concurrentMap`中也起到关键作用,保证了变量的即时可见性,...

    秋招面经和总结(csdn)————程序.pdf

    10. **ConcurrentHashMap**:Java并发容器,1.7版本采用分段锁,1.8使用CAS和Synchronized实现线性化视图,提供高效并发。 11. **死锁与循环等待**:死锁是多个线程相互等待对方释放资源导致无法继续的情况,循环...

    java源码总结-Java-Concurrent-Programming:java并发编程学习总结源码部分

    最后,项目可能涵盖了并发集合类,如`ConcurrentHashMap`、`CopyOnWriteArrayList`等,它们内部采用了分段锁或其他并发控制策略,保证了在并发环境下的高性能和线程安全。 通过这个项目,你可以学习到如何在实际...

    阿里javap6、p7面试重点

    - **ConcurrentHashMap**:深入理解ConcurrentHashMap的设计思想,比如分段锁机制、容量计算方法等。 #### 二、数据库与消息队列 1. **数据库优化**:熟悉SQL调优技巧,如索引优化、查询语句优化等;了解事务隔离...

    计算机后端-Java-Java高并发从入门到面试教程-可.zip

    它们内部使用了锁分段技术和CAS(Compare and Swap)无锁算法,确保了性能的同时保证线程安全。 **并发工具类**:如CountDownLatch、CyclicBarrier、Semaphore等,它们在多线程协作中起到关键作用,例如同步屏障、...

    Java并发编程实战(中文版带详细目录).pdf

    - **并发哈希表**:基于分段锁实现,提高了并发性能。 - **特性**:线程安全、高并发、高性能。 **5.2 CopyOnWriteArrayList/CopyOnWriteArraySet** - **读写分离**:读操作不加锁,写操作复制原数组,修改后再...

    Java基础及集合面试宝典(二).pdf

    ConcurrentHashMap是线程安全的,且通过分段锁机制提高并发访问效率;Properties类是Hashtable的子类,用于处理属性列表(key和value都是字符串类型)。 集合框架的使用好处颇多,它不仅提供了容量自增长的容器,还...

    JAVA 面试入坟系列(0.0.1) By_萧曵丶.pdf

    ### JAVA面试入坟系列知识点概览 #### 一、JAVA基础 ...以上内容为《JAVA面试入坟系列》部分知识点的总结与解析,旨在帮助读者更好地理解和掌握JAVA相关的基础知识和技术要点。希望对您的学习和面试有所帮助。

    整理的2018 java面试汇总,要面试的抓紧看了

    - 使用分段锁技术,将数据分割到多个段中,每个段上使用独立的锁。 - 提高了并发性能。 - **HashMap与ConcurrentHashMap的区别** - `HashMap`在多线程环境中可能导致数据不一致。 - `ConcurrentHashMap`提供...

Global site tag (gtag.js) - Google Analytics