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

【Java】CopyOnWriteArrayList

一,概述

CopyOnWriteArrayList作为List接口的实现之一,它区分于ArrayList在于它是线程安全的。如它名字一样,所有的写操作均复制了原数组的值,虽说代价较大,但读多写少的环境下,是可接受的。笔者在此简单看下实现原理。

二,实例

三,实现

承载数据存储的数组,便是array成员,其声明了volatile,让其具备原子性、可见性,

1,add

2,get

读是无锁操作,因为写操作仅会复制array,不会对读产生任何影响,这是重点,

且array声明了volatile,写操作完毕后,是可直接拿到已经改变的array。

3,set

set通过clone方式,创建一个副本

4,iter

设计模式中行为性迭代器设计模式,此处当然必不可少,

hasNext,next均无锁操作,

CopyOnWriteArrayList#Iter是不支持remove,set,add方法实现,毕竟遍历此List,只在读的情况下。并且在iter期间,突然的写操作,是无法影响此Iter,毕竟已经存了snapshot,写操作的array已经是新值。换句话说,Iter后,不管原CopyOnWriteArrayList内部值如何变化,均不会影响此Iter,snapshot已经独立。

http://www.lryc.cn/news/2402316.html

相关文章:

  • 【JS进阶】ES6 实现继承的方式
  • mac 电脑Pycharm ImportError: No module named pip
  • C#入门学习笔记 #8(委托)
  • CSS 3D 变换中z-index失效问题
  • Vue3 中使用 i18n
  • vue:当前对象添加对应值
  • Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(七):消息框交互功能添加
  • JavaScript 核心原理深度解析-不停留于表面的VUE等的使用!
  • 【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑
  • 基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境
  • 【图像处理入门】6. 频域图像处理:傅里叶变换与滤波的奥秘
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序的生态农庄留存运营策略研究
  • Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)
  • 【Linux】Git原理与使用
  • Cursor 工具项目构建指南: Python 3.8 环境下的 Prompt Rules 约束
  • A*算法实现原理以及实现步骤(C++)
  • Devops自动化运维---py基础篇一
  • 平安养老险蚌埠中心支公司开展金融宣教活动
  • 游戏设计模式 - 子类沙箱
  • java-springboot文件上传校验之只允许上传excel文件,且检查不能是脚本或者有害文件或可行性文件
  • openvino如何在c++中调用pytorch训练的模型
  • Redisson简明教程—你家的锁芯该换了
  • 48V带极性反接保护-差共模浪涌防护方案
  • Python----目标检测(使用YOLO 模型进行线程安全推理和流媒体源)
  • jvm学习第1day jvm简介,栈溢出、堆溢出
  • 用广告维持的免费 AI 图像生成工具(个人项目分享)
  • 分析Web3下数据保护的创新模式
  • ​减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。
  • 协议融合驱动效能跃升:Modbus转Ethernet IP的挤出吹塑机应用
  • Hive的TextFile格式优化方法