让我们用过思维导图总结一下 JDK 中所有的并发集合。
在 JDK 的并发集合包中,一共有如下 7 个类:
- ConcurrentHashMap:高并发的HashMap
- ConcurrentSkipListMap:高并发下的TreeMap(基于跳表实现)
- ConcurrentSkipListSet:内部使用ConcurrentSkipListMap实现
- CopyOnWriteArrayList:高并发的ArrayList,适合读场景。
- CopyOnWriteArraySet:高并发的Set集合,使用CopyOnWriteArrayList实现。
- ConcurrentLinkedQueue:高并发的链表队列。
- ConcurrentLinkedDeque:高并发的双向链表队列。
上面 7 个类其实可以分为 4 类:
高并发的HashMap
ConcurrentHashMap 是高并发的 HashMap 实现,其采用数组 + CAS 的方式实现并发控制。比起 JDK 1.7 (数组+segment+锁)的方式有更好的性能,在并发不是特别高的场景下会有更好的效率
高并发的TreeMap
我们普通的 HashMap 是无序的,而 TreeMap 则是 Map 的有序实现。但这两者都不是线程安全的,虽然我们可以通过自己加锁实现线程安全,但很多情况下效率都比较低。于是有了 ConcurrentSkipListMap 的诞生。
ConcurrentSkipListMap 是一个适用于高并发场景下的跳表实现,其实一个有序的 Map 实现,能够实现 log(N) 时间复杂度的查询、插入、删除操作。而 ConcurrentSkipListSet 则是采用 ConcurrentSkipListMap 实现的高并发有序 Set 集合。
高并发的ArrayList
CopyOnWriteArrayList 是高并发下的 ArrayList,其能够实现较高并发的数据读取,适用于读场景频繁的情况。而 ConcurrentSkipListSet 则是使用 CopyOnWriteArrayList 实现的 Set 集合,适用于高并发的数据读场景。
高并发的队列
ConcurrentLinkedQueue 是高并发情况下实现的链表队列,而 ConcurrentLinkedDeque 是高并发情况下实现的双向链表队列。
FEATURED TAGS
性能优化
单测
事务
Spring
性能调优
Tomcat
MySQL
系统设计
稳定性建设
synchronized
并发编程
Java内存模型
思维误区
认知成长
简历
爬虫
Github
邮件
经济学
书籍推荐
年度总结
个税
排序
算法
程序员
架构师
软件工程
操作系统
阻塞队列源码系列
推送基础系列
JVM 规范系列
Prometheus 入门系列
集合源码系列
JVM 基础系列
并发集合源码系列
并发包源码系列
线程池源码系列
JVM实战
Apache Common Pool
树结构
数据结构
中年危机
教员
Redis
HBase
有赞
Chrome
技术管理
美团
建站
Kafka
法律
Prometheus
商业
哲学
时间管理
Markdown
面试
华为
Maven
区块链
源码
雷军
小米
线上问题
管理
方法论
数据库
Push
JVM
Alfred
架构设计
计算机原理
MongoDb
职业规划
运维
重构
设计模式
LOG4J
ImageMagick
计算机网络
入门教程
毛主席
Java
Canal
ElasticSearch
Linux
Shell