假设有2个线程。两个线程都在并发HashMap的同一个Hashtable上工作。
线程T1通过调用map. get()而不是迭代来读取,而线程T2将对象放入并发HashMap的同一个HashTable中。
现在,如果达到阈值水平,因此T2将尝试在并发HashMap中调整Hashtable的大小。那么,T1是会被阻止读取还是会从旧的缓存结构中读取?
答:我假设作为价值和入口
我读过很多博客,甚至javadoc,它们都没有为这种情况提供明确的答案。让我知道你的输入。
从文档:
检索操作(包括
因此,如果您在另一个线程修改它时迭代ConCurrentHashMap
实例,则不会发生任何不好的事情,也不会阻塞您的线程,您只会看到一些较旧的快照。
另见:
>
并发HashMap如何在Java内部工作
并发HashMap如何在Java内部工作
以下是我的理解: