为什么ConcurrentHashMap不能允许key为null,而HashMap可以?
当你通过get(k)
获取对应的value时,如果获取到的是null时,你无法判断,它是put(k,v)
的时候value
为null
,还是这个key从来没有做过映射。HashMap
是非并发的,可以通过contains(key)
来做这个判断。而支持并发的Map
在调用m.contains(key)
和m.get(key)
的时候,m
可能已经不同了。
ConcurrentHashMap1.8是数组+链表+红黑树。加锁加在头节点,比如链表的首节点
ConcurrentHashMap1.7是分段的数组+链表,加锁是加在每个段上,段间并发,段内是无法并发的。
ConcurrentHashMap理解
于 2022-03-01 19:49:48 首次发布