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


scanAndLockForPut方法的功能是什么?
使用scanAndLockForPut而不是使用lock()方法来获取特定段上的锁有什么好处?
从javadoc注释中,我发现scanAndLockForPut用于减少高速缓存未命中。什么是高速缓存未命中以及如何减少此方法?


谢谢..

最佳答案

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

10-08 08:57