前言:
之前介绍了关于List的常用两种实现类:ArrayList、LinkedList。也从源码的角度介绍下这两种List的使用场景。
但是在多线程的场景中,这两种List类型就不适合使用了。我们需要使用多线程安全的List类来完成集合操作。
JDK也会我们提供了线程安全的List。本篇文章就介绍下Vector和CopyOnWriteArrayList
1.Vector
先说下这个类,这个类的属性方法同ArrayList一致,所以不再分析其源码。
那它为什么能够实现线程安全操作呢?主要就是因为Vector在其主要操作方法上都加上了synchronized关键字,这样就完成了线程安全操作
既然已经有了这个线程安全的List类,为啥还要CopyOnWriteArrayList?读者可以先自行思考下,最后会来解答
2.CopyOnWriteArrayList结构分析
/** A thread-safe variant of {@link java.util.ArrayList} */
public class CopyOnWriteArrayList
implements List, RandomAccess, Cloneable, java.io.Serializable {
// 实现线程安全的大杀器
final transient ReentrantLock lock = new ReentrantLock();
// 使用数组来存储数据
private transient volatile Object[] array;
相对ArrayList而言,多了一个用于线程安全的lock,少了计数的size
3.CopyOnWriteArrayList构造方法
// 1.空参构造
public CopyOnWriteArrayList() {
setArray(new Object[0]);
}
// 2.集合参数构造
public CopyOnWriteArrayList(Collection c)
Removes from this list all of its elements that are contained in the specified collection.
boolean removeIf(Predicate
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?