线程安全的List都有什么?
线程安全的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
- 写时加锁
- 读取时不加锁
- 添加元素的时候,先加锁,再复制替换操作,再释放锁
速度快
缺点
添加元素时,复制数组,比较消耗内存
仅能保证数据的最终一致性,而非实时的一致性
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)