java - ConcurrentHashMap中Bucket级锁和Segment级锁的区别?

标签 java concurrency

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

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/

相关文章:

java - 是使用invokeAll还是提交-Java Executor服务

c# - 没有多线程异步/等待的并发

java - 如何在 AlphaAnimation 运行时禁用按钮

java - JScrollPane 滚动可见但不起作用

java - 如何在 Spring 中解码自定义命名空间?

java - IntelliJ IDEA 无法在 AMD Athlon XP 1500+ (Windows 7) 上启动

java - 无需加载额外的光标即可获取给定媒体商店类型的成员数量

c - 您如何查询 pthread 以查看它是否仍在运行?

concurrency - 在并行快速排序实现中使用 go 例程时性能更差

java - HashSet 和多线程