1.CopyOnWriteList写时复制的链表(写操作方法时才会加锁,读方法不会加锁,保证一定的效率)

Note:实现的大致流程是:对于读操作,不会限制,出现写操作时,会先copy原先的一个数组,并且上锁;等到写操作修改完之后将原先对list的引用只想复制后的列表。(读写分离)旧的list会被垃圾回收。

2.add方法源码,首先ReentrantLock,接着使用上锁操作,此时所有的add操作会上锁,但是不会影响读操作。

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