欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【Java】CopyOnWriteArrayList

【Java】CopyOnWriteArrayList

2025/6/10 3:17:20 来源:https://blog.csdn.net/qq_40900926/article/details/148421904  浏览:    关键词:【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已经独立。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词