在并发HashMap中进行哈希处理期间进行检索

时间:2020-04-11 16:16:32

标签: java multithreading concurrency hashmap concurrenthashmap

我已经阅读了有关Concurrent HashMaps的实现,该实现指出“ ConcurrentHashMap在执行检索操作时不会阻塞,并且对常规操作没有锁定”。因此,假设我们同时调用put()方法和get()方法。如果put()执行重新哈希处理,则不需要同步get()方法。 get()方法将使用哈希%N(其中N是哈希图的大小)确定存储桶。 get()的存储桶计算方法是否应该因为重新哈希而受到影响?

1 个答案:

答案 0 :(得分:1)

仅在调整哈希表的大小时才会发生哈希。

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

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