JAVA源代码-java.util.concurrent 包--CopyOnWriteArrayList
CopyOnWriteArrayList实现读写分离,话不多说,上源码:
add采用synchronized进行加锁的,get直接根据下标获取数据。
/*** The lock protecting all mutators. (We have a mild preference* for builtin monitors over ReentrantLock when either will do.)*/
final transient Object lock = new Object();public boolean add(E e) {synchronized (lock) {Object[] es = getArray();int len = es.length;es = Arrays.copyOf(es, len + 1);es[len] = e;setArray(es);return true;}}/*** {@inheritDoc}** @throws IndexOutOfBoundsException {@inheritDoc}*/
public E get(int index) {return elementAt(getArray(), index);
}// Positional Access Operations@SuppressWarnings("unchecked")
static <E> E elementAt(Object[] a, int index) {return (E) a[index];}
add的时候先copy数据,然后在该数据的基础上将新元素插入到尾部,最后再将原容器的引用指向新的容器。
应用场景:读多写少的并发场景
缺点:
- 内存开销较大,写操作的时候,内存会同时驻扎两个对象的内存,内存占用较大,当存储数据过大时会造成内存溢出,同时也会引起full gc和yong gc, 系统响应会变慢。可通过压缩技术或者使用concurrentHashMap来实现。
- 只能保证结果最终一致性,不能保证结果实时一致性
性能分析,参考如下链接:http://blog.csdn.net/wind5shy/article/details/5396887
JAVA源代码-java.util.concurrent 包--CopyOnWriteArrayList相关推荐
- 【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?
2019独角兽企业重金招聘Python工程师标准>>> 为什么java.util.concurrent 包里没有并发的ArrayList实现? 问:JDK 5在java.util.c ...
- 高并发编程基础(java.util.concurrent包常见类基础)
JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...
- java.util.concurrent 包下面的所有类
java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...
- java.util.concurrent包
本文是我们学院课程中名为Java Concurrency Essentials的一部分 . 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之 ...
- java.util.concurrent包API学习笔记
newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...
- Java高并发编程学习(三)java.util.concurrent包
简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...
- Java 并发工具箱之concurrent包
概述 java.util.concurrent 包是专为 Java并发编程而设计的包.包下的所有类可以分为如下几大类: locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关 ...
- java.util.concurrent包详细分析--转
原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...
- java concurrent 框架,java.util.concurrent 包下的 Synchronizer 框架
看完书 java concurrency in practice 当然是想找点啥好玩的东东玩玩. 当看到了Doug Lee 的论文 << The java.util.concurrent ...
最新文章
- 使用ThinkPHP过程中发现的一些坑
- 如何在 Kubernetes 中对无状态应用进行分批发布
- OpenCV | OpenCv常用函数(代码类)
- 学完Web前端后发展方向有哪些呢?
- linux ftp查看用户目录权限,linux 指定ftp用户 特定目录及权限
- 斯坦福李纪为博士毕业论文:让机器像人一样交流
- pandas自动创建文件夹_pandas快速入门
- eigrp hello报文格式
- php http agent,PHP通过http头user-agent判断是否为手机浏览器
- .NET中GC的运行机制
- 对象三大特性:封装、继承、多态。通俗易懂!!看完还不懂来打我!!!超详细!!涉及各种重要基础
- 方程检验格式图片_eviews的异方差检验ppt课件
- 分析了获得家庭摇号新能源指标的数据后,我发现了一个秘密
- std::is_same的用法
- 第一个Python爬虫-抓取煎蛋网上图片
- Eclipse连接Hadoop集群(详细版)
- 4-AT命令交互之-COPS选择营运商
- 让慢行回归城市—佛山祖庙商圈慢行系统改善工程
- SD从零开始10 框架协议(Outline Agreement)—合同/计划协议
- 蓝桥杯试题:Fibonacci数列
热门文章
- 【计算机图形学基础】第一章绪论
- HDFS分布式文件系统具有哪些优点?
- c语言万年历的源代码,C语言万年历的源程序
- java算法题——豪哥打牌
- stm32 f103c8t6系列之 iic模式 点亮096 oled
- 抖音成牛年春晚独家合作伙伴;微信8.0安卓/IOS版正式更新;孙正义辞去软银董事长…
- 九度 1341 -图最短路径 - 艾薇儿的演唱会
- Ueditor百度编辑器 高度随内容增多而不断增高 问题解决
- 【凯立德】2012最新凯立德春季版导航C-Car系列 V3.0 地图编号2821J0A
- 概率密度直方图(可看作PDF的在步长较大时的近似)与累积分布直方图(可看作CDF的在步长较大时的近似)