Java并发集合:原理与使用场景速查

今天了解一下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

相关推荐
karry_k2 小时前
MyBatis批量insert-select踩坑:useGeneratedKeys=true 可能让PostgreSQL返回大量插入结果
java·后端
karry_k2 小时前
PostgreSQL 在 MyBatis 中执行正常 SQL 失效:一次 DELETE USING 踩坑记录
java·后端
SamDeepThinking6 小时前
从源码到代码:MyBatis-Flex 与 MyBatis-Plus 的逐项对比
java·后端·程序员
她的男孩8 小时前
Spring Boot 接 Flowable 工作流:用 3 个注解搭一个请假审批流程
java·后端·架构
荣码10 小时前
LLM结构化输出:让AI返回JSON而不是废话,我踩了4个坑
java·python
plainGeekDev12 小时前
Gson → kotlinx.serialization
android·java·kotlin
小bo波20 小时前
Java Swing 图形用户界面实验 —— 从算术练习到游戏开发的完整实践
java·课程设计·gui·游戏开发·扫雷·swing
咖啡八杯1 天前
GoF设计模式——备忘录模式
java·后端·spring·设计模式