Java 在并发HashMap中重新灰化期间的检索

Java 在并发HashMap中重新灰化期间的检索,java,multithreading,concurrency,hashmap,concurrenthashmap,Java,Multithreading,Concurrency,Hashmap,Concurrenthashmap,我读过关于并发HashMaps的实现,其中声明“ConcurrentHashMap在执行检索操作时不会阻塞,并且对于通常的操作没有锁定”。假设我们同时调用put()方法和get()方法。如果put()执行重新灰化,则不需要同步get()方法。get()方法将使用哈希%N(其中N是hashmap的大小)确定bucket。get()的bucket计算方法不应该因为重新灰化而受到影响吗 只有在重新调整哈希表的大小时才会进行重新分级 如果在重新调整大小操作期间调用了get(),则put()尚未完成,因此

我读过关于并发HashMaps的实现,其中声明“ConcurrentHashMap在执行检索操作时不会阻塞,并且对于通常的操作没有锁定”。假设我们同时调用put()方法和get()方法。如果put()执行重新灰化,则不需要同步get()方法。get()方法将使用哈希%N(其中N是hashmap的大小)确定bucket。get()的bucket计算方法不应该因为重新灰化而受到影响吗

只有在重新调整哈希表的大小时才会进行重新分级

如果在重新调整大小操作期间调用了
get()
,则
put()
尚未完成,因此
get()
将不会看到新值,这是它应该看到的


请记住,表箱位于一个数组中,而数组的大小是固定的,因此重新调整大小意味着一个全新的哈希表。在重新调整大小完成之前,该新哈希表对其他线程不可用。在此之前,所有其他调用
get()
的线程都将看到旧的哈希表。

不,您不必担心这个问题。这个课程是专门为处理这个问题而设计的。谢谢你的帮助。