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

1 篇文章 0 订阅
0 篇文章 0 订阅

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值