gpt4 book ai didi

java - 在并发 HashMap 中重新散列期间检索

转载 作者:行者123 更新时间:2023-12-05 03:54:11 25 4
gpt4 key购买 nike

我已经阅读了有关 ConcurrentHashMap 的实现,其中指出:

ConcurrentHashMap does not block when performing retrievaloperations, and there is no locking for the usual operations.

假设我们同时调用 put() 方法和 get() 方法:如果 put() 执行重新散列,我们不需要同步 get() 方法? get() 方法将使用 hash % N(其中 N 是 hashmap 的大小)确定存储桶。 get() 的 bucket 计算方法不应该因为 rehashing 而受到影响吗?

最佳答案

重新哈希仅在重新调整哈希表大小时发生。

如果 get() 在调整大小操作期间被调用,那么 put() 还没有完成,所以get() 不会看到新值,这是应该的。

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

关于java - 在并发 HashMap 中重新散列期间检索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61159929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com