concurrentHashmap问
时间: 2024-04-28 15:24:58 浏览: 86
ConcurrentHashMap与HashMap的主要区别在于其数据结构和线程安全性。在jdk1.7中,ConcurrentHashMap的结构是由一个Segment数组组成的,每个Segment都是一个类似于HashMap的散列表。每个Segment维护了一个独立的散列表,对于不同的key,会根据其哈希值将其放入对应的Segment中。这样做的好处是可以实现更细粒度的锁控制,提高并发性能。而HashMap是基于数组和链表实现的散列表。
ConcurrentHashMap不允许key和value为null的原因是为了解决多线程情况下的并发访问问题。在单线程情况下,HashMap是允许存储null值的。但在多线程情况下,如果允许存储null值,就会导致线程安全性问题。举个例子,当一个线程A在判断是否包含某个key的同时,另一个线程B又往ConcurrentHashMap中放入了一个null值,那么线程A的判断结果就会出现错误。为了防止这种情况发生,ConcurrentHashMap禁止存储null值。
总结来说,ConcurrentHashMap的不允许存储null值是为了保证多线程下的线程安全性,避免出现并发访问问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [ConcurrentHashMap 面试题 30 问](https://blog.csdn.net/wuhuayangs/article/details/126049472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [ConcurrentHashMap](https://blog.csdn.net/weixin_57128596/article/details/124544870)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文