如果我的hashCode()很弱,如何在ConcurrentHashMap中设置concurrencyLevel?

时间:2016-02-10 04:47:25

标签: java multithreading collections concurrenthashmap

如果我宣布ConcurrentHashMap<Person, Interests> - 如果我覆盖Person.hashCode()导致相同的哈希值[你设计不好!],那么所有元素都放在同一个桶中 - default concurrencyLevel [16]如何帮助并发写入?

我的理解是,在上述情况下,不会分发Map条目。因此,在修改特定<K,V>时,锁定是在唯一存在的hashBucket上建立的,因此没有其他线程可以修改其他<K1,V1>并从并发修改中受益

1 个答案:

答案 0 :(得分:1)

Person中,写操作只有在相同的段中写入时才会相互阻塞。也就是说,当您的hashCode()个对象具有相同的ConcurrentHashMap结果时,它们将全部放在HashMap的同一段中。

这意味着Person的添加将被同步,因为每次添加新的LinkedList对象时,ConcurrentHashMap中单个Person的锁定为获取和尝试添加另一个window的其他线程必须等待。