当前位置: 首页 > news >正文

CopyOnWriteArrayList源码学习

参数及其含义

  1. 可重入互斥锁。用于并发控制。保证操作的原子性
finaltransientReentrantLocklock=newReentrantLock();
  1. 对象数组,存储元素对象。加上volatile关键字,保证并发过程中数据的可见性。
privatetransientvolatileObject[]array;

常用方法

  1. 构造函数
publicCopyOnWriteArrayList(){setArray(newObject[0]);}

以无参构造函数为例,调用setArray方法给array变量赋值。

  1. add方法
publicbooleanadd(Ee){finalReentrantLocklock=this.lock;lock.lock();try{Object[]elements=getArray();intlen=elements.length;Object[]newElements=Arrays.copyOf(elements,len+1);newElements[len]=e;setArray(newElements);returntrue;}finally{lock.unlock();}}

添加元素到列表中。首先获取锁final ReentrantLock lock = this.lock;final关键字修饰,意味着引用本身不能改变,即不能再让这个引用指向另一个对象。
lock.lock();对接下来的操作上锁。
try块内核心逻辑:获取当前的数组对象,及其长度。然后将数组复制到一个长度为len+1的新数组中。将元素添加到数组结尾,然后调用setArray方法将数组赋值给array,返回true。
lock.unlock();lock和unlock要成对出现,finally中进行解锁。

  1. remove方法
  • 根据索引删除
publicEremove(intindex){
http://www.jsqmd.com/news/486982/

相关文章:

  • 拓宽视野:AI领域的非技术岗位全景图(产品、运营、销售等)
  • MySQL 中 MVCC 和锁的关系与配合
  • TR-069 交互流程开发规范
  • 基于SpringBoot与Android的宠物社区APP设计与实现
  • 2007-2024年上市公司多言寡行数据
  • ADS原理图VIAGND直接生成版图未成功过孔
  • 【第二周】RAG与Agent实战15:模板类的 format 和 invoke 方法深度解析
  • 矩形面积交-进阶题7
  • vue3-signature实现电子签名
  • 【GUI-Agent】阶跃星辰 GUI-MCP 解读---(1)---论文
  • Agentic AI时代程序员必备算法思想详解(附实战案例)
  • MySQL数据库—索引
  • AstrBot+NapCat 打造随时随地可用的 QQ 智能机器人(1)
  • MCP工具粒度的权衡 - yi
  • 解决大模型微调的灾难性遗忘:Nova Forge 数据混合策略工程实践
  • Claude Code 费用与中转api
  • C语言指针概念详解:数组指针与二级指针的本质区别
  • 2026年高端制造视角下的气密性测试仪供应商甄选与竞争力解析 - 深度智识库
  • P8627 [蓝桥杯 2015 省 A] 饮料换购【模拟+数学】
  • 第一个Java文件!Hello,world! - Kight
  • 银河麒麟桌面操作系统 V11 来袭!硬核架构 + 全维安全
  • kubernetes知识点汇总13-18
  • 2026年气密性测试仪选购指南:趋势解析与五大优质厂商深度评测 - 深度智识库
  • 无需服务器!Windows 部署 OpenClaw,打造私人 AI助手
  • 2026年气密性检测设备厂家实力推荐高端制造质检解决方案优选指南 - 深度智识库
  • 论文排版之添加图片、表格、公式的题注
  • 文化课期间复建 OI 记录
  • 第1章 线性代数的本源:线性、结构与系统思维
  • 基于 libhv 实现多路径 WebSocket 服务器:设计与实战
  • 最近在搞AUTOSAR项目,发现生成RTE和配置协议栈这两个环节真能让人头秃。今天就带大家手搓点实战经验,顺便聊聊那些藏在XML背后的骚操作