Java ConcurrentHashMap中桶级锁和段级锁的区别?

Java ConcurrentHashMap中桶级锁和段级锁的区别?,java,concurrency,Java,Concurrency,我浏览了下面的链接和一些在线视频教程,但在ConcurrentHashMap中找不到Bucket级锁和segment级锁的确切区别 在Java8ConcurrentHashMap中,将其逻辑更改为使用桶级锁而不是段级锁 有什么区别? 在Java7中,映射被细分为多个段,每个段本身都是一个可并发读取的哈希表。每个段中都包含一定数量的桶 bucket本身是键值对的列表/数组 并行处理map的线程数限制为段数 在Java8中,锁级别被移动到bucket级别,而段被删除(它仍然在代码中,但没有使用) 所

我浏览了下面的链接和一些在线视频教程,但在ConcurrentHashMap中找不到Bucket级锁和segment级锁的确切区别


在Java8
ConcurrentHashMap
中,将其逻辑更改为使用桶级锁而不是段级锁

有什么区别?

在Java7中,映射被细分为多个段,每个段本身都是一个可并发读取的哈希表。每个段中都包含一定数量的桶

bucket本身是键值对的列表/数组

并行处理map的线程数限制为段数

在Java8中,锁级别被移动到bucket级别,而段被删除(它仍然在代码中,但没有使用)

所以,基本上,在Java7中,插入是锁定几个bucket,而在Java8中,只有一个bucket


之所以这样做的另一个原因是,与映射并行工作的线程数量在映射大小增加的过程中可能会增加(更多的桶-更多的线程)。在Java 7中,段大小是固定的,如果不重新创建映射,就不能更改它。

您的意思是桶级或段级锁取决于我们可以指定的并发级别(默认值为16)。不,这是两种不同的方法,可以使映射安全地进行并行更改。并发级别只是其中的一部分。