我想知道当我们尝试在 ConcurrentHashMap 调整大小时读取它时可能发生的情况。
我知道在读取期间,第一次尝试总是不同步的。在第二次尝试中,它将尝试获取锁并重试。
但如果在调整大小期间发生这种情况,它将如何工作?
Thanks
通过查看源码:
ConcurrentHashMap 包含一个或多个段,具体取决于并发级别。
在重新哈希期间,一个段被锁定,新表在旧表旁边构建,然后在最后替换它。
如果你打电话get()
在重新散列一个段并且您的密钥存储在该段中时,您将无锁地访问该段的旧表,如果找到并且该值不为空,则将返回该表。如果该值为 null,则调用将阻塞,直到重新哈希完成并且该值将在锁定下再次读取。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)