CopyOnWriteArrayList源码
1.读写分离
写操作在一个复制的数组上进行,读操作还是在原始数组中进行,读写分离,互不影响。
写操作需要加锁,防止并发写入时导致写入数据丢失。
写操作结束之后需要把原始数组指向新的复制数组。
public boolean add(E e) {final ReentrantLock lock = this.lock;lock.lock();try {Object[] elements = getArray();int len = elements.length;Object[] newElements = Arrays.copyOf(elements, len + 1);newElements[len] = e;setArray(newElements);return true;} finally {lock.unlock();}
} final void setArray(Object[] a) {array = a;
} @SuppressWarnings("unchecked")
private E get(Object[] a, int index) {return (E) a[index];
}
2. 适用场景
CopyOnWriteArrayList 在写操作的同时允许读操作,大大提高了读操作的性能,因此很适合读多写少的应用场景。
但是 CopyOnWriteArrayList 有其缺陷:
- 内存占用:在写操作时需要复制一个新的数组,使得内存占用为原来的两倍左右
- Java 容器数据不一致:读操作不能读取实时性的数据,因为部分写操作的数据还未同步到读数组中。
所以 CopyOnWriteArrayList 不适合内存敏感以及对实时性要求很高的场景。
CopyOnWriteArrayList源码相关推荐
- 从面试角度分析CopyOnWriteArrayList源码
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 注:本系列文章中用到的jdk版本均为java8 相比很多同 ...
- 面试官系统精讲Java源码及大厂真题 - 15 CopyOnWriteArrayList 源码解析和设计思路
15 CopyOnWriteArrayList 源码解析和设计思路 古之立大事者,不唯有超世之才,亦必有坚韧不拔之志. 引导语 在 ArrayList 的类注释上,JDK 就提醒了我们,如果要把 Ar ...
- CopyOnWriteArrayList源码分析
基于jdk1.7源码 一.无锁容器 CopyOnWriteArrayList是JDK5中添加的新的容器,除此之外,还有CopyOnWriteArraySet.ConcurrentHahshMap和Co ...
- copyof java_死磕 java集合之CopyOnWriteArrayList源码分析
简介 CopyOnWriteArrayList是ArrayList的线程安全版本,内部也是通过数组实现,每次对数组的修改都完全拷贝一份新的数组来修改,修改完了再替换掉老数组,这样保证了只阻塞写操作,不 ...
- Java8 CopyOnWriteArrayList 源码分析
一.CopyOnWriteArrayList 概述 1.1 概念概述 CopyOnWriteArrayList 是 juc 包下一个线程安全的并发容器,底层使用数组实现.CopyOnWrite 顾名思 ...
- copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析
前言 CopyOnWriteArrayList是一个线程安全集合,原理简单说就是:在保证线程安全的前提下,牺牲掉写操作的效率来保证读操作的高效.所谓CopyOnWrite就是通过复制的方式来完成对数据 ...
- CopyOnWriteArrayList源码解析
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 注:在看这篇文章之前,如果对HashMap的层不清楚的话,建议先去看看HashMap源码解析. http:/ ...
- Copy-On-Write读写分离策略和CopyOnWriteArrayList源码分析
Copy-On-Write简称COW,是一种用于程序设计的优化策略.JDK有两种Copy-On-Write容器,CopyOnWriteArrayList和CopyOnWriteArraySet. Co ...
- 深读源码-java集合类总结篇
概览 我们先来看一看java中所有集合的类关系图. 这里面的类太多了,请放大看,如果放大还看不清,请再放大看,如果还是看不清,请放弃. 我们下面主要分成五个部分来逐个击破. List List中的元素 ...
最新文章
- integral函数
- 初等数论--同余--欧拉函数、欧拉定理、费马小定理
- 复现经典:《统计学习方法》​第16章 主成分分析
- 代码review工具:Review Board
- 给年薪不到48w的程序员提个醒!!
- 算法与数据结构--空间复杂度O(1)遍历树
- Java JDBC篇1——初识JDBC
- 微课|中学生可以这样学Python(3.2节):双分支选择结构
- 记录一下很好用的java爬虫代码-很有意思,原理也很简单,一看就懂
- uniapp编译成小程序代码过大的处理方法
- bin code led_一种led颜色BIN划分方法与流程
- Word 里文字对齐推荐这4种方法
- 关于微信公众号自动回复文本、图片以及图文
- nginx 实现多端口转发
- Fiddler与iPhone配合拦截首都图书馆微信小程序请求并多线程模拟请求刷预约 Java HttpGet HttpPost
- Golang-beego安装
- golang:go+liteIDE在windows环境配置(详细配置+出现问题解决说明)
- PHP生成PDF Mpdf扩展
- 树莓派wiringPi库初始化
- 触手可及的AI:2020十大人工智能APP揭榜时刻