如果我宣布ConcurrentHashMap<Person, Interests>
- 如果我覆盖Person.hashCode()
导致相同的哈希值[你设计不好!],那么所有元素都放在同一个桶中
- default concurrencyLevel [16]如何帮助并发写入?
我的理解是,在上述情况下,不会分发Map条目。因此,在修改特定<K,V>
时,锁定是在唯一存在的hashBucket上建立的,因此没有其他线程可以修改其他<K1,V1>
并从并发修改中受益
答案 0 :(得分:1)
在Person
中,写操作只有在相同的段中写入时才会相互阻塞。也就是说,当您的hashCode()
个对象具有相同的ConcurrentHashMap
结果时,它们将全部放在HashMap的同一段中。
这意味着Person
的添加将被同步,因为每次添加新的LinkedList
对象时,ConcurrentHashMap
中单个Person
的锁定为获取和尝试添加另一个window
的其他线程必须等待。