CopyOnWriteArrayList 读取和写入源码简单分析(java.util.concurrent包下)
1. CopyOnWriteArrayList 读取操作的实现

读取操作没有任何同步控制和锁操作,理由就是内部数组 array 不会发生修改,只会被另外一个 array 替换,因此可以保证数据安全.

2. CopyOnWriteArrayList 写入操作的实现
CopyOnWriteArrayList 写入操作 add() 方法在添加集合的时候 加了锁,保证同步, 避免多线程写的时候会 copy 出多个副本.

例子:

import java.util.concurrent.CopyOnWriteArrayList;//JUC并发编程扩充
public class JUC {public static void main(String[] args) throws InterruptedException {CopyOnWriteArrayList<String> list=new CopyOnWriteArrayList();for (int i = 1; i <= 1000; i++) {new Thread(()->{list.add(Thread.currentThread().getName());}).start();}Thread.sleep(1000);System.out.println(list.size());}
}


从输出结果看,CopyOnWriteArrayList集合是线程安全的集合,不需要同步.

查看源码:


可见该类自身已经有显性定义了锁,所以这个集合类是线程安全的集合.

线程安全的CopyOnWriteArrayList集合相关推荐

  1. 【JUC】第二章 线程间通信、集合的线程安全

    第二章 线程间通信.集合的线程安全 文章目录 第二章 线程间通信.集合的线程安全 一.线程间通信 1.介绍 2.synchronized 方案 3.Lock 方案 4.定制化线程通信 二.集合的线程安 ...

  2. 验证ArrayList是线程不安全的集合

    package collectionSafe; import java.util.ArrayList;import java.util.Collections;import java.util.Lis ...

  3. (转)线程安全的CopyOnWriteArrayList介绍

    转载自:线程安全的CopyOnWriteArrayList介绍 证明CopyOnWriteArrayList是线程安全的 先写一段代码证明CopyOnWriteArrayList确实是线程安全的. 读 ...

  4. 线程安全的CopyOnWriteArrayList介绍

    证明CopyOnWriteArrayList是线程安全的 先写一段代码证明CopyOnWriteArrayList确实是线程安全的. ReadThread.java import java.util. ...

  5. 考虑线程安全的List集合选择

    考虑线程安全的List集合选择 Vector 线程安全的List 总结 Vector Vector集合 底层是一种可增长对象数组,查询快,增删慢 线程安全,同步,但是因为所有方法都加了synchron ...

  6. Java中,通过synchronizedXxx()将线程不安全的集合转换成线程安全的集合

    保证线程安全的方法 synchronizedXxx():该方法可以使指定的集合包装成线程安全的集合,并返回 例如: Collections.synchronizedList(List) 将线程不安全的 ...

  7. JDK1.8源码分析:线程安全的CopyOnWriteArrayList与CopyOnWriteArraySet

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:服务端开发 blog.csdn.net/u01001 ...

  8. arraylist线程安全吗_java集合----超详细图解(ArrayList线程安全解决三种解决方法!)...

    (注意:多线程情况下的判断,如果你能确定就两个线程(不包括main主线程或者是说GC),判断可以用if,但如果是多个线程则用while,否则会出现错误)ArrayList线程安全的几个问题解决(Has ...

  9. java创建线程安全的Set集合

    CopyOnWriteArraySet CopyOnWriteArraySet<String> copyOnWriteArraySet = new CopyOnWriteArraySet& ...

最新文章

  1. leftjoin及多个leftjoin执行顺序
  2. 微信有电脑客户端吗_微信电脑版有多难用,你们真的没感觉吗
  3. 比萨问题–建造者与装饰者
  4. 三季度OPPO 持续热销 R11s将成新爆款
  5. DECLARE_GLOBAL_DATA_PTR
  6. android 系统(103)---Android 架构师需要掌握的技能
  7. Jmeter系列之参数化
  8. Razor语法(三)
  9. 根据xsd文件逆向生成java类
  10. 瑞昱网卡linux通用驱动下载,realtek网卡通用驱动最新版下载
  11. java opencv 模板匹配算法_OpenCV模板匹配算法详解
  12. 单片机音频谱曲软件_单片机音乐代码转换工具(Music Encode)
  13. Dev-C++ 提示源文件未编译,原因及解决办法
  14. 两台计算机如何连接一个网络打印机共享,打印机怎么连接2台电脑?两台或多台电脑连接共享打印机操作方法...
  15. html标签转换字符类型,java把html标签字符转换成普通字符(反转换成html标签)
  16. CommandName属性和CommandArgument属性[转]
  17. 明翰计算机基础知识V0.4(持续更新)
  18. 关于中级工程师职称评审有什么用?有必要办理中级工程师吗?
  19. 单片机毕设分享 stm32的RFID与指纹识别的门禁系统
  20. cpci检索为什么那么慢_cpci检索为什么那么慢_CPCI发一篇大概需要多久?

热门文章

  1. 狂神说 redis 笔记
  2. 2022大厂Java面试题库|附答案
  3. 7-6 拿糖果 (15 分)
  4. stm32定时器实验
  5. EVA 4400存储硬盘故障导致数据丢失怎么恢复?
  6. VB图书管理系统毕业设计
  7. 编写程序,输入华氏温度,输出对应的摄氏温度
  8. fastreport打印ftp图片_WebFastReportSetup.wse
  9. JAVA 数组专题(韩顺平)
  10. java jcf查看_JCF简单总结