您当前的位置: 首页 >  ar

恐龙弟旺仔

暂无认证

  • 0浏览

    0关注

    282博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

JDK源码解析之CopyOnWriteArrayList

恐龙弟旺仔 发布时间:2019-01-08 16:17:17 ,浏览量:0

 

 

前言:

    之前介绍了关于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            
关注
打赏
1655041699
查看更多评论
0.0396s