java - 在 ConcurrentHashMap 中,使用 scanAndLockForPut 而不是直接 lock() 方法来获取特定段上的锁有什么好处?

标签 java collections

ConcurrentHashMap 中,我有以下两个查询?我已经阅读了 Segment 类源代码中的 javadoc 注释,但无法理解。

  1. scanAndLockForPut 方法的功能是什么?

  2. 使用 scanAndLockForPut 而不是使用 lock() 方法获取特定段上的锁有什么好处?

  3. 从 javadoc 评论中,我发现 scanAndLockForPut 用于减少缓存未命中。什么是缓存未命中以及此方法如何减少它?

谢谢..

最佳答案

scanAndLockForPut 的要点或多或少是在等待段上的锁定时做一些有用的事情。特别是,它开始检查条目是否已经存在,在等待锁定时缓慢地遍历哈希桶,如果它到达桶的末尾,它会为要进入的值创建一个新条目。 (此外,遍历哈希桶会将我们关心的条目移动到缓存中,这意味着在成功获取锁后再次查看它们会更快。)

关于java - 在 ConcurrentHashMap 中,使用 scanAndLockForPut 而不是直接 lock() 方法来获取特定段上的锁有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27448337/

相关文章:

java - 如何比较Java LocalTime中的时间?

java - 我的服务器应该同时使用 TCP 和 UDP 吗?

java - 读取大文件并保留这些记录以供处理

Java 迭代器 : What does it mean :java. util.ArrayList$Itr

java - 如何设置系统默认字体为JComboBox<String>的选中项?

java - 在 Java 中找不到适合 jdbc 的驱动程序

java - 在 Java 8 中的当前流方法中使用 Stream 方法

java - 为什么要收集文字?

kotlin - 组合多个谓词不起作用

java - Collection.sort() 基于第一次排序进行第二次排序