我通过下面的链接和一些在线视频教程,但无法找到确切的区别桶级锁和段级锁在ConcurrentHashMap。
发布于 2019-06-10 14:03:39
在Java8中,ConcurrentHashMap
将其逻辑更改为使用桶级锁而不是段级锁。
有什么区别?
在Java 7中,映射被细分为各个片段,每个片段本身都是一个并发可读的哈希表。每个段中包含一定数量的桶。
桶本身是键值对的列表/数组。
并行处理map的线程数仅限于段数。
在Java 8中,锁级别被移动到桶级,而段被移除(它仍然在代码中,但没有使用)。
所以,基本上,在Java 7中,插入是锁定几个桶,在Java 8中只有一个。
之所以这样做的另一个原因是,与映射并行工作的线程数量会在地图大小增加时增加(更多的桶-更多的线程)。在Java中,7段的大小是固定的,如果不重新创建一个映射,就无法更改它。
https://stackoverflow.com/questions/56527417
复制相似问题