集合(list set map)线程不安全怎么解决

ArrayList线程不安全演示: ArrayList线程不安全,为了保证线程的并发,和效率,它的add方法并没有加锁

这就是高并发情况下,出现的异常 java.util ConcurrentModificationException

解决list线程不安全的 

 

(1):vavtor 里面的add方法加锁了,代码演示,并发性比较安全,但是效率降低代码演示

(2):使用扩展类包:Collections中的,从这个包中表明,set map也是不安全的

 源码分析为什么Collections可以保证线程安全

(3)使用CopyOnWriteArrayList (写时复制),代码演示

 源码的意思:添加一个元素在数组的后面:

1:初始化一个数组,拿到这个数组的长度,把数组赋值在末尾新增一行,然后再把新的数组重新赋值给数组。

例子讲解:比如现在班级点名,笔只有一只,也就是源码中的锁,表示班级中的某个人再写的时候不准其他的人过来写(防止多个线程同时写),当某个人写好了才把笔给释放掉,其他人就可以拿到这支笔了来写,而且每次只增加一行位置。

 2:HashSet是不是线程安全的代码演示,说明他也是一样的也是线程不安全的

 

解决set不安全的问题

(1):CopyOnWriteSet从源码中我们发现他也是一个CopyOnWriteArrayList

 

3:集合不安全之Map代码演示:看到了这里我们发现他们的报错都是一样的所以他们的解决方法也是一样的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值