线程安全的List都有什么?

线程安全的List都有什么?

Vector

  1. 线程安全
  2. 底层数组
  3. 扩容两倍

用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

  1. 写时加锁
  2. 读取时不加锁
  3. 添加元素的时候,先加锁,再复制替换操作,再释放锁
    速度快

缺点

添加元素时,复制数组,比较消耗内存
仅能保证数据的最终一致性,而非实时的一致性

posted @ 2022-09-22 17:25  DevourZuan  阅读(182)  评论(0编辑  收藏  举报