【Java】CopyOnWriteArrayList

来源:互联网 发布:数据透视显示百分比 编辑:程序博客网 时间:2024/05/16 11:26

ArrayList是非线程安全的,多线程版本是CopyOnWriteArrayList,思路是“快照”。就是读取不会上锁,修改会上锁,但是修改时会拷贝一份出来,在拷贝的数组中修改,修改完了再设置回去。所以读取可能无法读到最新的,如果在读的同时其他修改,这个修改读不到。不会影响。适用于读多的应用。

 private E get(Object[] a, int index) {        return (E) a[index];    }

    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();        }    }

其他remove和set类似。

原创粉丝点击