CopyOnWriteArrayList处理集合对象在处理时出现少见的异常

简单介绍一下CopyOnWriteArrayList

CopyOnWriteArrayList

为什么要介绍一下CopyOnWriteArrayList因为这个的功能十分的强大 我自己也是第一次知道 所以就跟大家分享一下(不喜勿喷),一般常用的集合就是List、ArrayList、LinkedList、map,set这类的,像是CopyOnWriteArrayList我也是第一次在项目中遇到问题才知道的,接下来介绍一下这个

CopyOnWriteArrayList是开发过程中常用的一种并发容器,常用于读多写少的并发场景:

  • 实现了list;
  • 内部有一个锁ReentrantLock();
  • 底层是用volatile transient声明的数组 array
  • 读写分离,写时复制出一个新的数组,完成插入、修改或者移除操作后将新数组赋值给array

CopyOnWrite并发容器用于读多写少的并发场景。比如白名单,黑名单,商品类目的访问和更新场景,假如我们有一个搜索网站,用户在这个网站的搜索框中,输入关键字搜索内容,但是某些关键字不允许被搜索。这些不能被搜索的关键字会被放在一个黑名单当中,黑名单每天晚上更新一次。当用户搜索时,会检查当前关键字在不在黑名单当中,如果在,则提示不能搜索。

我说一下 我是这么发现这个的

这里我描述一下我的业务需求:从数据库获取到有个对象集合,遍历这个对象集合并对这个集合对象继续数据处理,接下来看图:

下面是我直接用List处理的图:

使用list接收用for增强处理
这样的处理的话90%是会报ConcurrentModificationException的异常。或者是空指针异常等奇奇怪怪的问题,我在这里一开始 就是这样接的 很奇怪测的时候没事 结果过了几天就会出现一些奇奇怪怪的异常

这里的话好像是list底层是用数组的因为我这设计到一个循环删除对象的问题,所以就会把数组的指针删了,这样这里就会出现异常(–.--) 我有想过用用LinkedList来处理的LinkedList底层实现的是链表不过好像也会报这个问题 不知道是不是这样的 要是哪里有问题 请各位老哥多多指点

这个是我用CopyOnWriteArrayList实现的:

勒勒勒
我用CopyOnWriteArrayList这个处理ConcurrentModificationException的异常
ConcurrentModificationException的异常一般都是在遍历集合处理集合数据时产生的
以后有老哥遇到这样的问题可以 试试看

具体的详情可以查看:
ConcurrentModificationException的异常
CopyOnWrite容器
CopyOnWriteArrayList详解

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值