【Java集合类面试二十五】、有哪些线程安全的List?

文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。

面试官:有哪些线程安全的List?

参考答案:

1、Vector

Vector是比较古老的API,虽然保证了线程安全,但是由于效率低一般不建议使用。

2、Collections.SynchronizedList

SynchronizedList是Collections的内部类,Collections提供了synchronizedList方法,可以将一个线程不安全的List包装成线程安全的List,即SynchronizedList。它比Vector有更好的扩展性和兼容性,但是它所有的方法都带有同步锁,也不是性能最优的List。

3、CopyOnWriteArrayList

CopyOnWriteArrayList是Java 1.5在java.util.concurrent包下增加的类,它采用复制底层数组的方式来实现写操作。当线程对此类集合执行读取操作时,线程将会直接读取集合本身,无须加锁与阻塞。当线程对此类集合执行写入操作时,集合会在底层复制一份新的数组,接下来对新的数组执行写入操作。由于对集合的写入操作都是对数组的副本执行操作,因此它是线程安全的。在所有线程安全的List中,它是性能最优的方案。

相关推荐
keyborad pianist2 分钟前
Web开发 Day1
开发语言·前端·css·vue.js·前端框架
坚持就完事了3 分钟前
Python的类型注解
开发语言·python
wjs202413 分钟前
HTML URL 编码
开发语言
wjs202418 分钟前
Lua 循环
开发语言
Evand J27 分钟前
matlab GUI制作界面的一些笔记(入门)
开发语言·笔记·matlab
我是大猴子28 分钟前
Java面经
java·开发语言
Never_Satisfied36 分钟前
在c#中,如何删除字符串中的第x个字符
开发语言·c#
_nirvana_w_38 分钟前
Qt项目链接库时遇到的坑:-l选项的正确用法
开发语言·c++·qt·qt框架·elawidgettools
努力学算法的蒟蒻40 分钟前
day89(2.18)——leetcode面试经典150
算法·leetcode·面试
froginwe1141 分钟前
数据访问对象模式(Data Access Object Pattern)
开发语言