码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-03-25 12:07:56      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:image   原来   code   com   位置   使用场景   zed   提升   存储   

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有各自的锁,以此提高效率。

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

标签:image   原来   code   com   位置   使用场景   zed   提升   存储   

原文地址:https://blog.51cto.com/13678728/2481618

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!