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数据,然后在该数据的基础上将新元素插入到尾部,最后再将原容器的引用指向新的容器。

应用场景:读多写少的并发场景

缺点:

  1. 内存开销较大,写操作的时候,内存会同时驻扎两个对象的内存,内存占用较大,当存储数据过大时会造成内存溢出,同时也会引起full gc和yong gc, 系统响应会变慢。可通过压缩技术或者使用concurrentHashMap来实现。
  2. 只能保证结果最终一致性,不能保证结果实时一致性

性能分析,参考如下链接:http://blog.csdn.net/wind5shy/article/details/5396887

JAVA源代码-java.util.concurrent 包--CopyOnWriteArrayList相关推荐

  1. 【ArrayList】为什么java.util.concurrent 包里没有并发的ArrayList实现?

    2019独角兽企业重金招聘Python工程师标准>>> 为什么java.util.concurrent 包里没有并发的ArrayList实现? 问:JDK 5在java.util.c ...

  2. 高并发编程基础(java.util.concurrent包常见类基础)

    JDK5中添加了新的java.util.concurrent包,相对同步容器而言,并发容器通过一些机制改进了并发性能.因为同步容器将所有对容器状态的访问都串行化了,这样保证了线程的安全性,所以这种方法 ...

  3. java.util.concurrent 包下面的所有类

    java.util.concurrent 包下面的所有类 原子操作数类: java.util.concurrent.atomic.AtomicBoolean.class java.util.concu ...

  4. java.util.concurrent包

    本文是我们学院课程中名为Java Concurrency Essentials的一部分 . 在本课程中,您将深入探讨并发的魔力. 将向您介绍并发和并发代码的基础知识,并学习诸如原子性,同步和线程安全之 ...

  5. java.util.concurrent包API学习笔记

    newFixedThreadPool 创建一个固定大小的线程池. shutdown():用于关闭启动线程,如果不调用该语句,jvm不会关闭. awaitTermination():用于等待子线程结束, ...

  6. Java高并发编程学习(三)java.util.concurrent包

    简介 我们已经学习了形成Java并发程序设计基础的底层构建块,但对于实际编程来说,应该尽可能远离底层结构.使用由并发处理的专业人士实现的较高层次的结构要方便得多.要安全得多.例如,对于许多线程问题,可 ...

  7. Java 并发工具箱之concurrent包

    概述 java.util.concurrent 包是专为 Java并发编程而设计的包.包下的所有类可以分为如下几大类: locks部分:显式锁(互斥锁和速写锁)相关: atomic部分:原子变量类相关 ...

  8. java.util.concurrent包详细分析--转

    原文地址:http://blog.csdn.net/windsunmoon/article/details/36903901 概述 Java.util.concurrent 包含许多线程安全.测试良好 ...

  9. java concurrent 框架,java.util.concurrent 包下的 Synchronizer 框架

    看完书 java concurrency in practice 当然是想找点啥好玩的东东玩玩. 当看到了Doug Lee 的论文 << The java.util.concurrent ...

最新文章

  1. 使用ThinkPHP过程中发现的一些坑
  2. 如何在 Kubernetes 中对无状态应用进行分批发布
  3. OpenCV | OpenCv常用函数(代码类)
  4. 学完Web前端后发展方向有哪些呢?
  5. linux ftp查看用户目录权限,linux 指定ftp用户 特定目录及权限
  6. 斯坦福李纪为博士毕业论文:让机器像人一样交流
  7. pandas自动创建文件夹_pandas快速入门
  8. eigrp hello报文格式
  9. php http agent,PHP通过http头user-agent判断是否为手机浏览器
  10. .NET中GC的运行机制
  11. 对象三大特性:封装、继承、多态。通俗易懂!!看完还不懂来打我!!!超详细!!涉及各种重要基础
  12. 方程检验格式图片_eviews的异方差检验ppt课件
  13. 分析了获得家庭摇号新能源指标的数据后,我发现了一个秘密
  14. std::is_same的用法
  15. 第一个Python爬虫-抓取煎蛋网上图片
  16. Eclipse连接Hadoop集群(详细版)
  17. 4-AT命令交互之-COPS选择营运商
  18. 让慢行回归城市—佛山祖庙商圈慢行系统改善工程
  19. SD从零开始10 框架协议(Outline Agreement)—合同/计划协议
  20. 蓝桥杯试题:Fibonacci数列

热门文章

  1. 【计算机图形学基础】第一章绪论
  2. HDFS分布式文件系统具有哪些优点?
  3. c语言万年历的源代码,C语言万年历的源程序
  4. java算法题——豪哥打牌
  5. stm32 f103c8t6系列之 iic模式 点亮096 oled
  6. 抖音成牛年春晚独家合作伙伴;微信8.0安卓/IOS版正式更新;孙正义辞去软银董事长…
  7. 九度 1341 -图最短路径 - 艾薇儿的演唱会
  8. Ueditor百度编辑器 高度随内容增多而不断增高 问题解决
  9. 【凯立德】2012最新凯立德春季版导航C-Car系列 V3.0 地图编号2821J0A
  10. 概率密度直方图(可看作PDF的在步长较大时的近似)与累积分布直方图(可看作CDF的在步长较大时的近似)