zoukankan      html  css  js  c++  java
  • 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不到最近的值)

  • 相关阅读:
    第八章
    第十章
    第九章
    第七章
    第六章
    第五章
    第四章心得
    第二章心得
    第三章心得
    第一章心得
  • 原文地址:https://www.cnblogs.com/jinjian91/p/9061481.html
Copyright © 2011-2022 走看看