线程安全的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 @   DevourZuan  阅读(210)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示