在调整大小时读取ConcurrentHashMap

kro*_*orm 2 concurrenthashmap

我想知道当我们在调整大小时尝试读取ConcurrentHashMap时可能出现的情况.

我知道在读取过程中,第一次尝试总是不同步的.在第二次尝试中,它将尝试获取锁定并重试.

但如果在调整大小期间发生它会如何工作?

谢谢

Bla*_*der 6

通过查看来源:

ConcurrentHashMap包含一个或多个段,具体取决于并发级别.

在重新散列期间,一个段被锁定,新表在旧表旁边构建,然后在最后替换它.

如果get()在段的重新散列期间调用并且您的密钥存储在该段中,您将访问该段的旧表而没有锁定,如果找到并且该值不为空,则将返回该表.如果该值为null,则调用将阻塞,直到重新散列完成,并且将在锁定下再次读取该值.