有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java当并发级别大于ConcurrentHashMap的容量时会发生什么?

一段时间以来,我一直在为一个问题绞尽脑汁。我环顾四周,但未能找到答案。我想知道如果concurrencyLevel大于地图的capacity会发生什么

默认情况下,两者都是16,这意味着每个铲斗都有一个锁。如果capacity是32,而concurrencyLevel是16,则锁将被保持在两个桶上。但是当concurrencyLevel是32而capacity是16时会发生什么呢

每个存储桶是否由两个锁持有,那么如果concurrencyLevelcapacity的分布不均匀,比如24和16,或者其他什么,会发生什么


共 (1) 个答案

  1. # 1 楼答案

    没有什么特别的事发生。你查过ConcurrentHashMap的文档了吗?它说:“此外,为了与这个类的早期版本兼容,构造函数可以选择指定一个预期的concurrencyLevel,作为内部大小调整的额外提示。”这是一个暗示,而不是限制。此外,关于concurrencyLevel:“并发更新线程的估计数量。实现可能会使用此值作为调整大小的提示。”注:“五月”。因此,如果发生任何事情,大小会有所不同。也许吧

    如果您想要进一步的实现细节,可以研究源代码。它是可用的。在Java 1.8中,它包含以下两行:

        if (initialCapacity < concurrencyLevel)   // Use at least as many bins
            initialCapacity = concurrencyLevel;   // as estimated threads