ArrayList和Vector竟然又被提起

Arraylist和vector
CopyOnWriteArrayList
Vector是线程同步的,可以由两个线程安全的访问一个Vector对象,但是一个线程访问Vector的话代码要在同步上消耗大量的时间。Vector扩容一次为原来的两倍
ArrayList不是同步的,所以在不要求线程同步的情况下建议使用ArrayList,需要时使用CopyOnWriteArrayList。ArrayList一次扩容为1.5倍

Vector和CopyOnWriteArrayList

Vector中有synchronized关键字修饰方法,虚假的线程安全。
在这里插入图片描述

解决办法(大可不必)
在这里插入图片描述

所以用CopyOnWriteArrayList来替代
把大象塞冰箱统共分几步?
把数据写进里面分几步?第一步加锁,第二部copy后操作,第三步开锁

在这里插入图片描述

lock()加锁
先copy一个新的数组并且加一位然后再添加进新的,最后我们把旧的抛弃把新的给他set
unlock()解锁,finally不管操作结果一定要解锁
删除就根据删除位置之类的情况进行复制操作
两大问题:
由于这个特性,我们只能根据结果来看(最终一致性)而不能实时(不满足实时一致性)

这样的操作必然也会占用到内存,可以酌情来使用其他容器(concurrenthashmap)

有部分图片借鉴自其他博客。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值