当前位置: 首页 > 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已经独立。

相关文章:

  • 【OSG学习笔记】Day 15: 路径动画与相机漫游
  • 结构性设计模式之Facade(外观)设计模式
  • 【二分图 图论】P9384 [THUPC 2023 决赛] 着色|普及+
  • SpringAI(GA):Nacos2下的分布式MCP
  • vue 打包报错 Cannot find module ‘@vue/cli-plugin-babel/preset‘ - thread-loader
  • vue-16(Vuex 中的模块)
  • 2025年渗透测试面试题总结-腾讯[实习]安全研究员(题目+回答)
  • IEEE ICBCTIS 2025 会议征稿:探索区块链与信息安全的前沿学术之旅​
  • 学习STC51单片机27(芯片为STC89C52RCRC)
  • PageHelper-分页插件
  • PaddleOCR(2):PaddleOCR环境搭建
  • 文本内容变化引起布局尺寸变化 导致的 UI 适配问题
  • DuckDB + Spring Boot + MyBatis 构建高性能本地数据分析引擎
  • day 44
  • 深入解析FutureTask:原理与实战
  • 【从0-1的HTML】第3篇:html引入css的3种方式
  • Golang——7、包与接口详解
  • Redisson - 实现延迟队列
  • DAY43 复习日
  • 压测软件-Jmeter
  • scratch编程网站/手机怎么搭建网站
  • 江苏住房和城乡建设厅网站首页/百度seo网站在线诊断
  • wordpress 数据库用户/陕西seo优化
  • 哈尔滨模板建站服务商/网络营销论坛
  • 做网站点击率怎么收钱/seo顾问咨询
  • 南部网站建设/公司推广宣传文案