java 集合 之ArrayList (必备知识点)
ArrayList 是线程安全?
如果线程不安全,那落地解决方案您了解吗?
ArrayList
ArrayList 大家估计都是很熟悉的吧,它是线程安全的吗?
…
答案是 不是线程安全的。
当启动 30个线程进行 添加值 报出错误
java.util.ConcurrentModificationException
这个错误是 由于 多线程并发修改 抛出的错误
有哪些解决方法呢?
方法一 Vector(不使用)
我们使用30个线程 进行 添加数据 成功
Vector 的 add 方法 是有 synchronized 同步方法 保证并发执行 但是效率低 。jdk1.2(不推荐使用)
方法二 Collections.synchronizedList (不推荐使用)
List list =Collections.synchronizedList(new ArrayList<>());
Collections.synchronizedList() 它的底层使用的synchronized 效率低 锁粗粒度比较重 不推荐使用 源码如下
方法三 CopyOnWriteArrayList (推荐使用)落地方案
解析opyOnWriteArrayList
写入时复制 opyOnWriteArrayList 读写分离 源码如下
使用了 juc 的lock 锁(比synchronized轻量)高可以
ArrayList 解析
ArrayList 它的 add 方法 是线程不安全的