我浏览了下面的链接和一些在线视频教程,但无法找到 ConcurrentHashMap 中的存储桶级锁定和段级锁定之间的确切区别。
最佳答案
在 Java 8 ConcurrentHashMap
中,更改了其逻辑以使用存储桶级锁而不是段级锁。
有什么区别?
在 Java 7 中,映射被分割为多个段,每个段本身都是一个并发可读的哈希表。每个段内部包含一定数量的桶。
存储桶本身是一个键值对的列表/数组。
并行使用map的线程数量受到段数量的限制。
在 Java 8 中,锁级别已移至存储桶级别,同时删除了段(它仍在代码中,但未使用)。
因此,基本上,在 Java 7 中,插入操作会锁定几个存储桶,而在 Java 8 中,仅锁定一个存储桶。
这样做的另一个原因是,与映射并行工作的线程数量可能会在映射大小增加时增加(更多存储桶 - 更多线程)。在 Java 7 中,段大小是固定的,如果不重新创建映射就无法更改它。
关于java - ConcurrentHashMap中Bucket级锁和Segment级锁的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56527417/