在调整大小时读取ConcurrentHashMap

时间:2017-05-16 19:26:58

标签: concurrenthashmap

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

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

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

由于

1 个答案:

答案 0 :(得分:5)

通过观察来源:

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

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

如果您在重新划分某段时调用get()并且您的密钥存储在该段中,您将无锁地访问该段的旧表,如果找到并且该值不为空,则它将是回。如果该值为null,则调用将阻塞,直到重新散列完成,并且将在锁定下再次读取该值。