企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
### ConcurrentHashMap ConcurrentHashMap是HashMap的线程安全版本的实现版本; ConcurrentHashMap结构图: ![](https://img.kancloud.cn/28/85/2885e21e69eb51e5e802e66581ba4190_1000x541.png) 和HashMap类似,ConcurrentHashMap使用了一个table来存储Node,ConcurrentHashMap同样使用记录的key的hashCode来寻找记录的存储index,而处理哈希冲突的方式与HashMap也是类似的,冲突的记录将被存储在同一个位置上,形成一条链表,当链表的长度大于8的时候会将链表转化为一棵红黑树 在ConcurrentHashMap(1.8)中,内部使用一个volatile的数组table保存数据,在获取数组的元素时,采用Unsafe类的getObjectVolatile方法,在设置数组元素时,采用compareAndSwapObject方法 因为Java数组在元素层面的元数据设计上的缺失,无法表达元素是final、volatile等语义,所以开了后门,使用getObjectVolatile用来补上无法表达元素是volatile的坑,用来补上final的坑,数组元素就跟没有标volatile的成员字段一样,无法保证线程之间可见性 【知识点】 * HashMap允许一个key和value为null,而ConcurrentHashMap则不允许key和value为null,否则抛出NullPointerException 【参考资料】 [http://www.infoq.com/cn/articles/ConcurrentHashMap](http://www.infoq.com/cn/articles/ConcurrentHashMap) [https://blog.csdn.net/yan\_wenliang/article/details/51029372](https://blog.csdn.net/yan_wenliang/article/details/51029372) https://www.jianshu.com/p/c0642afe03e0