美文网首页
ConcurrentHashMap的通俗解释

ConcurrentHashMap的通俗解释

作者: NoahU | 来源:发表于2018-04-11 10:43 被阅读38次

【转载 http://www.bootdo.com/blog/open/post/130

相信每个JAVA程序员都了解HashMap,最大的问题是线程不安全,因为方法中不涉及到同步,也正因为如此,HashMap的效率非常高,在不涉及线程安全的程序中广泛被应用。然而当涉及到多线程作业时,就会出现一些问题。为了解决这些问题JAVA提供了Hashtable,这是一种整体加锁的数据结构,然而效率不敢恭维。这时候就有了ConcurrentHashMap。

一个例子说明三者关系:
前提:某个卫生间共有16个隔间。

HashMap:每个隔间都没锁门,有人想上厕所,管理员指给他一个隔间,里面没人的话正常用,里面有人的话把这个人赶出来然后用。
优点,每个人进来不耽误都能用;缺点,每一个上厕所的人都有被中途赶出来的危险。

Hashtable:在卫生间外面安装一个大门,有人想上厕所,问管理员要一个钥匙进门,把门反锁用,用完后出来,把钥匙交换给管理员。在这个人上厕所期间,其他所有人都必须在外面排号。
优点,每个人都能安心上完厕所;缺点,卫生间外面可能已经出了人命。 =_=

ConcurrentHashMap:在卫生间每个隔间安装门锁,有人想上厕所,管理员指给他一个隔间,进来后这个隔间如果没人在用则直接用,如果有人正在用,则排号。在这期间其他人会按规则分到不同的隔间,重复上述行为。
优点:每个人都能安心上厕所,外面排队的也被均匀分摊。缺点:。。。

ConcurrentHashMap实现的原理
ConcurrentHashMap把Map分成了N个Segment(默认16),其中Segment是线程同步的,相当于分成了N个Hashtable。当实现Put方法时,在key值经过正常的hash后,还要再经过一次segmentForHash算法,用来分配具体防盗哪个Segment。后来的线程如果经过计算也是放在这个Segment下,则需要先获取锁,如果计算得出应该放在其他的Segment,则正常执行,不会影响效率,以此实现线程安全。ConcurrentHashMap使用锁分离技术,只要多个修改操作不发生在同一个Segment上,它们就可以并发进行。
有些方法需要跨段,比如size()和containsValue(),需要锁定整个表而而不仅仅是某个段,这需要按顺序锁定所有段,操作完毕后,又按顺序释放所有段的锁。这里“按顺序”是很重要的,否则极有可能出现死锁,在ConcurrentHashMap内部,段数组是final的,并且其成员变量实际上也是final的,但是,仅仅是将数组声明为final的并不保证数组成员也是final的,这需要实现上的保证。这可以确保不会出现死锁,因为获得锁的顺序是固定的。

参考资料

相关文章

  • ConcurrentHashMap的通俗解释

    【转载 http://www.bootdo.com/blog/open/post/130 】 相信每个JAVA程序...

  • Ajax通俗解释

    javascript 有个对象 XMLHttpRequest ,利用它可以打开站点一个页面,但这个页面不会显示在当...

  • JDK1.7 ConcurrentHashMap

    详细的解释 ↓漫画:什么是ConcurrentHashMap?Java泛型底层源码解析--ConcurrentHa...

  • 抽象词语的通俗解释

    2018-05-28 喜欢:愿意和某个人,两个人在一起,度过一段时间,做一些事情。 爱:愿意无条件为某人做他需要的...

  • 用通俗的语言解释

    故人云:近朱者赤近墨者黑 怎么用现代通俗易懂的话语来解释。 本意就是教你如何选择朋友,简单来说就是:跟着亿万赚千万...

  • 通俗的解释价格弹性

    价格弹性,这是一个经济学的词。 从百度上搜索到的解释是指价格变动引起的市场需求量的变化程度。它是企业决定产品提价或...

  • 比特币通俗解释

    在这篇文章中我会给出一个虚拟的村庄叫“比特村”,整个文章会以讲故事的方式,逐步告诉大家比特币提出的动机、解决了什么...

  • 通俗解释glLoadIdentity(),glPushMatri

    对于glLoadIdentity(),glPushMatrix(),glPopMatrix()的作用虽然网上有很多...

  • 【Java常识】6.0Eclipse的实用使用、==号和equa

    1.曾经写过很多自以为很通俗易懂的面向对象的解释。 如下是目前最通俗的一种解释: 2.Eclipse的补充解释。 ...

  • 2018-11-11

    循环神经网络(RNN)原理通俗解释 循环神经网络(RNN)原理通俗解释 - 多元思考力 - CSDN博客 一文搞懂...

网友评论

      本文标题:ConcurrentHashMap的通俗解释

      本文链接:https://www.haomeiwen.com/subject/iirahftx.html