java 集合 之ArrayList (必备知识点)

java 集合 之ArrayList (必备知识点)

ArrayList 是线程安全?

如果线程不安全,那落地解决方案您了解吗?

ArrayList

ArrayList 大家估计都是很熟悉的吧,它是线程安全的吗?


答案是 不是线程安全的。
java 集合 之ArrayList (必备知识点)_第1张图片
当启动 30个线程进行 添加值 报出错误
java.util.ConcurrentModificationException
这个错误是 由于 多线程并发修改 抛出的错误

有哪些解决方法呢?

方法一 Vector(不使用)

我们使用30个线程 进行 添加数据 成功
java 集合 之ArrayList (必备知识点)_第2张图片
Vector 的 add 方法 是有 synchronized 同步方法 保证并发执行 但是效率低 。jdk1.2(不推荐使用)
java 集合 之ArrayList (必备知识点)_第3张图片

方法二 Collections.synchronizedList (不推荐使用)

List list =Collections.synchronizedList(new ArrayList<>());
java 集合 之ArrayList (必备知识点)_第4张图片
Collections.synchronizedList() 它的底层使用的synchronized 效率低 锁粗粒度比较重 不推荐使用 源码如下
java 集合 之ArrayList (必备知识点)_第5张图片

方法三 CopyOnWriteArrayList (推荐使用)落地方案

java 集合 之ArrayList (必备知识点)_第6张图片

解析opyOnWriteArrayList

写入时复制 opyOnWriteArrayList 读写分离 源码如下
java 集合 之ArrayList (必备知识点)_第7张图片

使用了 juc 的lock 锁(比synchronized轻量)高可以

ArrayList 解析

ArrayList 它的 add 方法 是线程不安全的
java 集合 之ArrayList (必备知识点)_第8张图片

你可能感兴趣的:(ArrayList,并发,java,java,多线程,并发编程,arraylist)