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

本文深入探讨了Java中ArrayList的线程安全性问题,揭示了其在多线程环境下可能引发的ConcurrentModificationException异常,并提供了三种解决方案:Vector、Collections.synchronizedList及CopyOnWriteArrayList,其中重点推荐使用CopyOnWriteArrayList。

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 方法 是线程不安全的
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值