我想知道当我们在调整大小时尝试读取ConcurrentHashMap时可能出现的情况.
我知道在读取过程中,第一次尝试总是不同步的.在第二次尝试中,它将尝试获取锁定并重试.
但如果在调整大小期间发生它会如何工作?
谢谢
通过查看来源:
ConcurrentHashMap包含一个或多个段,具体取决于并发级别.
在重新散列期间,一个段被锁定,新表在旧表旁边构建,然后在最后替换它.
如果get()在段的重新散列期间调用并且您的密钥存储在该段中,您将访问该段的旧表而没有锁定,如果找到并且该值不为空,则将返回该表.如果该值为null,则调用将阻塞,直到重新散列完成,并且将在锁定下再次读取该值.
| 归档时间: |
|
| 查看次数: |
511 次 |
| 最近记录: |