线程安全的CopyOnWriteArrayList集合
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集合相关推荐
- 【JUC】第二章 线程间通信、集合的线程安全
第二章 线程间通信.集合的线程安全 文章目录 第二章 线程间通信.集合的线程安全 一.线程间通信 1.介绍 2.synchronized 方案 3.Lock 方案 4.定制化线程通信 二.集合的线程安 ...
- 验证ArrayList是线程不安全的集合
package collectionSafe; import java.util.ArrayList;import java.util.Collections;import java.util.Lis ...
- (转)线程安全的CopyOnWriteArrayList介绍
转载自:线程安全的CopyOnWriteArrayList介绍 证明CopyOnWriteArrayList是线程安全的 先写一段代码证明CopyOnWriteArrayList确实是线程安全的. 读 ...
- 线程安全的CopyOnWriteArrayList介绍
证明CopyOnWriteArrayList是线程安全的 先写一段代码证明CopyOnWriteArrayList确实是线程安全的. ReadThread.java import java.util. ...
- 考虑线程安全的List集合选择
考虑线程安全的List集合选择 Vector 线程安全的List 总结 Vector Vector集合 底层是一种可增长对象数组,查询快,增删慢 线程安全,同步,但是因为所有方法都加了synchron ...
- Java中,通过synchronizedXxx()将线程不安全的集合转换成线程安全的集合
保证线程安全的方法 synchronizedXxx():该方法可以使指定的集合包装成线程安全的集合,并返回 例如: Collections.synchronizedList(List) 将线程不安全的 ...
- JDK1.8源码分析:线程安全的CopyOnWriteArrayList与CopyOnWriteArraySet
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:服务端开发 blog.csdn.net/u01001 ...
- arraylist线程安全吗_java集合----超详细图解(ArrayList线程安全解决三种解决方法!)...
(注意:多线程情况下的判断,如果你能确定就两个线程(不包括main主线程或者是说GC),判断可以用if,但如果是多个线程则用while,否则会出现错误)ArrayList线程安全的几个问题解决(Has ...
- java创建线程安全的Set集合
CopyOnWriteArraySet CopyOnWriteArraySet<String> copyOnWriteArraySet = new CopyOnWriteArraySet& ...
最新文章
- leftjoin及多个leftjoin执行顺序
- 微信有电脑客户端吗_微信电脑版有多难用,你们真的没感觉吗
- 比萨问题–建造者与装饰者
- 三季度OPPO 持续热销 R11s将成新爆款
- DECLARE_GLOBAL_DATA_PTR
- android 系统(103)---Android 架构师需要掌握的技能
- Jmeter系列之参数化
- Razor语法(三)
- 根据xsd文件逆向生成java类
- 瑞昱网卡linux通用驱动下载,realtek网卡通用驱动最新版下载
- java opencv 模板匹配算法_OpenCV模板匹配算法详解
- 单片机音频谱曲软件_单片机音乐代码转换工具(Music Encode)
- Dev-C++ 提示源文件未编译,原因及解决办法
- 两台计算机如何连接一个网络打印机共享,打印机怎么连接2台电脑?两台或多台电脑连接共享打印机操作方法...
- html标签转换字符类型,java把html标签字符转换成普通字符(反转换成html标签)
- CommandName属性和CommandArgument属性[转]
- 明翰计算机基础知识V0.4(持续更新)
- 关于中级工程师职称评审有什么用?有必要办理中级工程师吗?
- 单片机毕设分享 stm32的RFID与指纹识别的门禁系统
- cpci检索为什么那么慢_cpci检索为什么那么慢_CPCI发一篇大概需要多久?