我有一个ConcurrentHashMap,并尝试使用putIfAbsent()放入一个键值对。现在,因为每个在concurrentHashMap上工作的线程都有自己的段,它由一组键值对组成。是否会将新的键值对放在它自己的段中,或者没有任何类似的强制要求?
谢谢
发布于 2019-07-18 22:55:51
你有一个根本性的误解。线程没有自己的段。ConcurrentHashMap的映射根据键的散列码分布在段上,在最好的情况下,访问不同键的线程在不同的段结束,因此可以独立工作。
访问相同键的线程永远不会在不同的段结束。Map的原则是所有密钥都是唯一的,这一原则不会改变。
但不管怎样,这是对过时技术的描述。从Java8开始,ConcurrentHashMap不再使用段。根据容量和散列码分布,所有密钥可能会同时更新。
https://stackoverflow.com/questions/57095875
复制相似问题