ArrayList和Vector竟然又被提起

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

Vector和CopyOnWriteArrayList

Vector中有synchronized关键字修饰方法,虚假的线程安全。
ArrayList和Vector竟然又被提起_第1张图片

解决办法(大可不必)
ArrayList和Vector竟然又被提起_第2张图片

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

ArrayList和Vector竟然又被提起_第3张图片

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

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

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

你可能感兴趣的