分段锁的理解及其使用场景

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了分段锁的理解及其使用场景相关的知识,希望对你有一定的参考价值。

1.ConcurrentHashMap

        ConcurrentHashMap使用分段锁保证线程安全,效率比使用synchronized的HashTable高很多,每个集合都可以看做一个存储东西的房子,HashTable与ConcurrentHashMap存储的都是HashEntry数组(每个数组里面是链表)。
        HashTable:在HashTable这个房子里,只有一个房间,里面是一长列的存放Entry的货架(数组)。只要有一个人进了这个房间,就会把这个房间锁起来,知道这个人在房间里面做完了事情出来后才会把们打开。如果有其他人需要进去,只能等待。这会导致外面等了很多人,效率不高。
技术图片
        ConcurrentHashMap:在ConcurrentHashMap这个房子里,有很多房间,每个房间都存储着Entry货架(Entry数组的不同段,将一整个Entry数组分开了),这些房间各自又有着不同的锁。一个人在访问某一个房间时,会把这个房间锁起来,其他房间依然可以进去,这样可以大大提升效率。

技术图片
        在HashTable中:线程A想访问Entry数组前面的位置,线程B想访问Entry数组后面的位置,如果A先进去了,房子就会被锁住,B不得不等待。
        在ConcerrentHashMap中:线程A想访问Entry数组前面的位置,线程B想访问Entry数组后面的位置,A进到了前面元素所在的房间访问,B仍然可以去尾部元素所在的房间,他们处在不同的房间。

2.分段锁

        先分段再锁,将原来的一整个的Entry数组分成了若干段,分别将这若干段放在了不同的新的Segment数组中(分房间),每个Segment有各自的锁,以此提高效率。

以上是关于分段锁的理解及其使用场景的主要内容,如果未能解决你的问题,请参考以下文章

ReentrantLock可重入锁的原理及使用场景

java ReentrantLock可重入锁的使用场景

浅析js中的原型和原型链及其使用场景

java中锁的概念/介绍

Hive中的锁的用法和使用场景

java模式及其应用场景