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

【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.lqws.cn/news/117937.html

相关文章:

  • 人机融合智能 | 可穿戴计算设备的多模态交互
  • 如何使用 BPF 分析 Linux 内存泄漏,Linux 性能调优之 BPF 分析内核态、用户态内存泄漏
  • 星闪开发之Server-Client 指令交互控制OLED灯案例
  • 结构性设计模式之Flyweight(享元)
  • 关于udp——mqtt运行注意事项
  • 改进社区检测和检索策略大幅提升GraphRAG性能新框架-ArchRAG
  • GICv3电源管理
  • 解决 Java 项目中 “zip END header not found“ 错误
  • Doris查询Hive数据:实现高效跨数据源分析的实践指南
  • ASP.NET Core 中间件深度解析:构建灵活高效的请求处理管道
  • zookeeper 学习
  • 高效使用AI大模型:测试工程师提示词编写框架
  • 软珊瑚成分 CI-A:靶向口腔癌细胞的 “氧化利剑” 与 ERK 密码
  • Kafka 单机部署启动教程(适用于 Spark + Hadoop 环境)
  • Kafka 消息队列
  • 学习笔记085——Spring Data JPA笔记
  • 阿里云ACP云计算备考笔记 (3)——云服务器ECS
  • 5分钟了解JVM运行时数据区域
  • 电脑网络重置,找不到原先自家的WIFI,手机还能正常连接并上网
  • Elasticsearch从安装到实战、kibana安装以及自定义IK分词器/集成整合SpringBoot详细的教程(二)
  • 自动化生产线,IT部署一站式解决方案-Infortrend KS私有云安全,一机多用
  • 国芯思辰ADE芯片成功替代ADS1296R,除颤仪核心部件实现自主可控
  • 【使用JAVA调用deepseek】实现自能回复
  • 嵌入式链表操作原理详解
  • 使用 systemctl 实现程序自启动与自动重启
  • Attention Is All You Need:抛弃循环神经网络的时代来了!
  • [AI Claude] 软件测试1
  • 【深度学习优化算法】02:凸性
  • 使用 SseEmitter 实现 Spring Boot 后端的流式传输和前端的数据接收
  • 《最近公共祖先》题集