码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-05-19 20:35:09      阅读:191      评论:0      收藏:0      [点我收藏+]

标签:obj   赋值   index   []   ola   object   复制   bool   ransient   

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 并发包下的不安全(数组)集合

标签:obj   赋值   index   []   ola   object   复制   bool   ransient   

原文地址:https://www.cnblogs.com/jinjian91/p/9061481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!