线程安全的List都有什么?
Vector
- 线程安全
- 底层数组
- 扩容两倍
用collections包装ArrayList
使用Collections.synchronizedList(list); 将list包装成SynchronizedList
需要注意的是SynchronizedList的add等操作加了锁,但是iterator()方法没有加锁,如果使用迭代器遍历的时候需要在外面手动加锁。
SynchronizedList 和 Vector区别
- SynchronizedList有较好的扩展性,可以将ArrayList ,LinkedList等都改成同步的,而Vector底层只有数组的结构。
- SynchronizedList 并没有对Iterator方法进行加锁,遍历时需要手动同步处理,Vector加锁了。
- SynchronizedList 可以指定锁定的对象。
- 扩容机制不一样SynchronizedList 1.5倍 ,Vector2倍。
- SynchronizedList使用同步代码块,锁的范围更小。Vector锁的方法。
适用场景:当不需要使用iterator()并且对性能要求不高的场景。
CopyOnWriteArrayList
- 写时加锁
- 读取时不加锁
- 添加元素的时候,先加锁,再复制替换操作,再释放锁
速度快
缺点
标签:加锁,List,SynchronizedList,安全,Vector,线程,数组 From: https://www.cnblogs.com/devour-zuan-blog/p/16720157.html添加元素时,复制数组,比较消耗内存
仅能保证数据的最终一致性,而非实时的一致性