首页/新闻资讯/正文详情

11 · 并发容器全家桶

发布时间:2026/11/4 12:15:06 来源:云帆数科 栏目:资讯中心
11 · 并发容器全家桶
一句话定位除了 ConcurrentHashMapJUC 还提供了一整套线程安全容器各有适用场景。1. 为什么不用 Collections.synchronizedXxxListStringlistCollections.synchronizedList(newArrayList());本质是给每个方法加synchronized整个容器一把锁并发度1。复合操作仍不安全遍历时要手动加锁。性能差JUC 容器是更好的选择。2. CopyOnWriteArrayList写时复制核心思想读不加锁写的时候复制一份新数组改改完替换引用。CopyOnWriteArrayListStringlistnewCopyOnWriteArrayList();// add 源码精髓publicbooleanadd(Ee){synchronized(lock){// 写加锁Object[]oldgetArray();Object[]newArrArrays.copyOf(old,old.length1);// 复制新数组newArr[old.length]e;setArray(newArr);// volatile 替换引用returntrue;}}publicEget(intindex){return(E)getArray()[index];// 读完全不加锁}优点缺点读无锁读性能极高写要复制整个数组内存性能开销大遍历时不抛 ConcurrentModificationException数据弱一致读可能读到旧快照适用读多写极少、数据量不大。典型监听器列表、配置白名单、路由表。不适用频繁写、大数据量每次写都复制OOM 风险。3. CopyOnWriteArraySet基于 CopyOnWriteArrayList 实现的 Set特性相同适合读多写少的集合去重场景。4. ConcurrentLinkedQueue无锁队列基于CAS的无界非阻塞队列不是阻塞队列ConcurrentLinkedQueueTaskqueuenewConcurrentLinkedQueue();queue.offer(task);// 入队CAS不阻塞Tasktqueue.poll();// 出队空返回 null不阻塞高并发下性能好无锁 CAS。空时poll返回 null不阻塞和 BlockingQueue 的 take 不同。size()要遍历是 O(n)别频繁调用。适用高并发、不需要阻塞等待的队列场景。需要阻塞用 BlockingQueue见 12 篇。5. ConcurrentSkipListMap / Set并发有序容器跳表SkipList实现的并发有序Map/Set相当于并发版的 TreeMap。ConcurrentSkipListMapInteger,StringmapnewConcurrentSkipListMap();map.put(3,c);map.put(1,a);map.put(2,b);// 自动按 key 排序支持范围查询map.firstKey();// 1map.headMap(2);// 小于 2 的部分map.ceilingKey(2);// 2 的最小 key跳表结构多层索引链表查询 O(log n) L2: 1 ────────────→ 9 L1: 1 ──→ 4 ──────→ 9 L0: 1 → 3 → 4 → 6 → 9 (底层完整链表)TreeMapConcurrentSkipListMap线程安全❌✅实现红黑树跳表有序✅✅适用需要并发 有序 范围查询。比如排行榜、按时间排序的事件表。6. 容器选型速查需求推荐容器并发 MapConcurrentHashMap并发有序 MapConcurrentSkipListMap读多写极少的 ListCopyOnWriteArrayList高并发非阻塞队列ConcurrentLinkedQueue需要阻塞的队列生产消费BlockingQueue见 12 篇并发 SetConcurrentHashMap.newKeySet()读多写少的 SetCopyOnWriteArraySet7. 踩坑与最佳实践⚠️ CopyOnWrite 系列写代价大只用于读多写极少、数据量小的场景否则 OOM。⚠️ CopyOnWrite 读的是快照弱一致刚写的可能读不到别用于强一致场景。⚠️ConcurrentLinkedQueue.size()是 O(n)判空用isEmpty()不要用size()0。✅ 需要并发 Set 用ConcurrentHashMap.newKeySet()比 CopyOnWriteArraySet 更通用。✅ 别用Collections.synchronizedXxxJUC 容器性能更好。 遍历 CopyOnWriteArrayList 时其他线程的修改不影响当前遍历基于快照不会抛并发修改异常。8. 本篇小结CopyOnWriteArrayList写时复制读无锁适合读多写极少。ConcurrentLinkedQueueCAS 无锁队列不阻塞。ConcurrentSkipListMap跳表实现的并发有序 Map。按“是否有序、是否阻塞、读写比例”选择合适容器。

相关推荐

emacs 文件管理Dired, the Directory Editor
emacs 文件管理Dired, the Directory Editor

Dired:目录编辑器 Dired 会创建一个 Emacs Buffer,其中包含某个目录的文件列表,并且还可以选择性地包含该目录下的一些子目录的内容。 你可以使用 Emacs 的常规命令在这个 Buffer 中移动和浏览,也可以使用 Dired 专用命令对列表中… · 2026/11/4 12:15:06

自己练习云迁移与部署
自己练习云迁移与部署

要点:创建云主机系统环境配置装运行环境(Java/Python) 天翼云后台查看已分配资源:ECS / EIP / RDS / REDIS / VPC / 安全组EIP 先绑定 ECS 完成应用迁移部署 Docker 容器化环境,下载 Java、Node、Maven 等镜像之后把 E… · 2026/11/4 12:15:06

一张产品图,怎么做成一套电商素材?分享 6 类做图思路与可复用提示词
一张产品图,怎么做成一套电商素材?分享 6 类做图思路与可复用提示词

做商品页面时,常见的难点不是缺少一张好看的图,而是手里只有几张产品照片,却需要同时准备白底图、场景图、细节图和详情页横幅。每一张都重新设计,容易出现颜色不一致、产品结构变化、版式各做各的问题。换一个做法:先… · 2026/11/4 12:14:06

SQL日期函数详解:从基础到高级应用
SQL日期函数详解:从基础到高级应用

1. 日期函数在SQL查询中的核心价值 日期处理是数据库操作中最常见也最容易出错的环节之一。记得刚入行时,我曾在月度报表统计中因为时区转换问题导致数据偏差30%,差点引发连锁反应。正是这类教训让我意识到,熟练掌握SQL日期函数不是可选项&am… · 2026/11/4 12:59:41

具身智能与代数信息系统的融合设计与实现
具身智能与代数信息系统的融合设计与实现

1. 项目背景与核心概念解析 "云藏山鹰代数信息系统"这个命名本身就蕴含着丰富的技术哲学思考。从字面拆解来看,"云藏"暗示着云计算与数据存储能力,"山鹰"象征着系统的敏锐与高效,"代数信息系统"则明… · 2026/11/4 12:59:41

深入解析Spark Job调度机制与性能优化
深入解析Spark Job调度机制与性能优化

1. Spark Job 调度机制全景透视 当你在Spark Shell里敲下那个.count()的瞬间,集群究竟发生了什么?这个看似简单的操作背后,隐藏着一套精密的分布式调度系统。作为Spark核心引擎的"中枢神经",调度机制直接决定了作业执行… · 2026/11/4 12:59:41

Word简历模板怎么选怎么改:从样式排版到投递解析的稳定版式指南
Word简历模板怎么选怎么改:从样式排版到投递解析的稳定版式指南

1. 免费模板满地都是,卡住你的从来不是“没有模板” 这几年帮人看简历,我被问得最多的一句话不是“我这段经历该怎么写”,而是“你那儿有没有好看的 简历模板 , Word格式 的那种,最好免费的”。问的人多了&#xf… · 2026/11/4 12:59:41

JVM垃圾回收机制与内存管理详解
JVM垃圾回收机制与内存管理详解

1. JVM垃圾回收基础概念解析1.1 什么是JVM中的垃圾在Java虚拟机中,垃圾(Garbage)的准确定义是:堆内存和方法区中那些已经没有任何引用指向、程序在后续执行过程中永远无法再访问到的对象或数据所占用的内存空间。简单来说&#xf… · 2026/11/4 12:59:41

深度学习生成模型:RBM原理与PyTorch实现详解
深度学习生成模型:RBM原理与PyTorch实现详解

1. 项目概述:深度学习经典教材精读系列 这个编号为"deeplearningbook_027-2"的项目,是我在系统研读《Deep Learning》教材过程中整理的系列笔记之一。作为AI领域的经典著作,该书由Ian Goodfellow等权威学者撰写,全面覆盖… · 2026/11/4 12:58:40

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 6:59:29

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 7:02:38

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码