我读到ConcurrentHashMap在多线程中比Hashtable更好,这是因为在存储桶级别具有锁,而不是在映射范围内具有锁。每个 map 最多可以锁定32个锁。想知道为什么32个锁,为什么不超过32个锁。

最佳答案

如果您正在谈论Java的ConcurrentHashMap,则限制为arbitrary:



如果阅读source code,很明显,最大段数为2 ^ 16,对于不久的将来可能出现的任何需求,这应该绰绰有余。

您可能已经在考虑某些替代性的实验性实现,例如this one:



请注意,通常,当超过32个线程试图更新单个ConcurrentHashMap时,瓶颈通常不是同步效率。

10-04 16:37