ConcurrentHashMap中的存储桶级别锁定和段级别锁定之间的区别?

时间:2019-06-10 13:30:16

标签: java concurrency

我浏览了下面的链接和一些在线视频教程,但是无法在ConcurrentHashMap中找到存储桶级锁定和段级锁定之间的确切区别。

ConcurrentHashMap

1 个答案:

答案 0 :(得分:1)

在Java 8中,ConcurrentHashMap更改了其逻辑,以使用存储桶级锁定代替段级锁定。

有什么区别?

在Java 7中,将地图细分为多个细分,每个细分本身都是可同时读取的哈希表。每个段的内部包含一定数量的存储桶。

存储桶本身是键/值对的列表/数组。

并行使用map的线程数限制为段数。

在Java 8中,锁定级别已移至存储桶级别,同时删除了段(它仍在代码中,但未使用)。

因此,基本上,在Java 7中,插入是锁定几个存储桶,而在Java 8中,只有一个存储桶。

这样做的另一个原因是,与地图并行工作的线程数可以在地图大小增加时增加(更多的存储桶-更多的线程)。在Java 7中,分段的大小是固定的,并且必须重新创建地图才能更改。