java - ConcurrentHashMap中Bucket级锁和段级锁的区别?
解决方案
在 Java 8ConcurrentHashMap
中,将其逻辑更改为使用存储桶级锁而不是段级锁。
有什么区别?
在 Java 7 中,映射被细分为 Segments,每个 Segments 本身都是一个并发可读的哈希表。每个段内部都包含一些桶。
存储桶本身是键值对的列表/数组。
并行使用 map 的线程数受限于段数。
在 Java 8 中,锁级别被移动到存储桶级别,而段被删除(它仍在代码中,但没有使用)。
所以,基本上,在 Java 7 中插入是锁定几个桶,在 Java 8 中 - 只有一个。
这样做的另一个原因是,与映射并行工作的线程数量可以在映射大小增加期间增加(更多桶 - 更多线程)。在 Java 7 中,段大小是固定的,如果不重新创建地图就无法更改。
推荐阅读
- python - 如何找到精灵之间的距离?
- python - 为什么在下面的代码中使用 return 语句末尾的括号,为什么如果我不使用括号它返回地址?
- python - 使用数据框中的条件调整循环内的值
- python - 从 wef 输出文件中提取数据
- google-closure-compiler - 将 JSON 对象注释为 Google Closure Compiler 的数组
- reactjs - React-Admin 参考输入问题
- javascript - 内联嵌入字段不起作用
- ios - 为什么我无法获取存储在 firestore 子集合中的所有文档?
- javascript - 如何在javascript中将时间戳'字符串'转换为日期?
- java - 设置 hive.exec.pre.hooks 时出现 ClassNotFoundException