copyOnWriteArray 并发包下的不安全(数组)集合

Posted 爱不死

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了copyOnWriteArray 并发包下的不安全(数组)集合相关的知识,希望对你有一定的参考价值。

copyOnWriteArray  记录一下

package java.util.concurrent;//你没有看错,是这个包
 private transient volatile Object[] array;//初始化数组

 public CopyOnWriteArrayList() {//构造函数,初始化
        setArray(new Object[0]);
    }

 final void setArray(Object[] a) {
        array = a;
    }

public boolean add(E e) {
        final ReentrantLock lock = this.lock;
        lock.lock();
        try {
            Object[] elements = getArray();
            int len = elements.length;
            Object[] newElements = Arrays.copyOf(elements, len + 1);
            newElements[len] = e;
            setArray(newElements);
            return true;
        } finally {
            lock.unlock();
        }
    }

final Object[] getArray() {
        return array;
    }
public E get(int index) {//获取单个数组对象 return get(getArray(), index); }
private E get(Object[] a, int index) { return (E) a[index]; }

  add的时候枷锁,先复制,后赋值;get的时候并没有加锁,(导致多线程的时候可能get不到最近的值)

 

以上是关于copyOnWriteArray 并发包下的不安全(数组)集合的主要内容,如果未能解决你的问题,请参考以下文章

Java中juc并发包下的Condition接口与ReentrantLock对象锁实现线程通信

JDK1.8并发包之 -- CountDownLatch

Java并发包--ReentrantLock

Java并发包--ReentrantLock

Java并发包下锁学习第二篇Java并发基础框架-队列同步器介绍

书讯矿工不安全行为传播网络模型及其应用——基于社会接触的视角