今天了解一下java的并发集合类
🎯 ConcurrentHashMap
原理 :JDK8采用CAS + synchronized,只锁住桶中的头节点,并发度高
场景:高并发下的KV存储,比如缓存、计数器
java
ConcurrentHashMap<String, Integer> cache = new ConcurrentHashMap<>();
🎯 CopyOnWriteArrayList
原理 :写时复制 - 修改时复制新数组,读取无锁,弱一致性
场景 :读多写极少,如白名单、配置信息、监听器列表
java
CopyOnWriteArrayList<String> whiteList = new CopyOnWriteArrayList<>();
🎯 BlockingQueue
原理 :锁 + 条件等待,队列满/空时自动阻塞线程
场景 :生产者-消费者模型,线程池任务队列
java
BlockingQueue<String> queue = new LinkedBlockingQueue<>(10);
queue.put("task"); // 满则阻塞
String task = queue.take(); // 空则阻塞
🎯 ConcurrentLinkedQueue
原理 :CAS算法实现无锁队列,性能高
场景:高并发下的队列操作,不需要阻塞
java
ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();
queue.offer("task"); // 非阻塞添加
String task = queue.poll(); // 非阻塞获取
🎯 ConcurrentSkipListMap
原理 :跳表数据结构,有序,平均O(log n)性能
场景:需要排序的并发Map,如排行榜
java
ConcurrentSkipListMap<String, Integer> scoreMap = new ConcurrentSkipListMap<>();
📊 一句话选型指南
| 集合 | 一句话原理 | 一句话场景 |
|---|---|---|
| ConcurrentHashMap | CAS+锁桶 | 高并发KV存储 |
| CopyOnWriteArrayList | 写时复制 | 读多写极少 |
| BlockingQueue | 锁+条件等待 | 生产者消费者 |
| ConcurrentLinkedQueue | CAS无锁 | 高并发非阻塞队列 |
| ConcurrentSkipListMap | 跳表 | 需要排序 |
💡 记住核心思想
-
读多写少 → CopyOnWriteArrayList
-
KV存储 → ConcurrentHashMap
-
生产者消费者 → BlockingQueue
-
要排序 → ConcurrentSkipListMap
-
不要阻塞 → ConcurrentLinkedQueue