源码分析:读写(get,add)
一:get 方法
private E get(Object[] a, int index) { return (E) a[index]; } 可以看到读取数据的时候 没有添加任何限制。和ArrayList的方法一致 二:add 方法
1.public boolean add(E e) { 2. final ReentrantLock lock = this.lock; 3. lock.lock(); 4. try { 5. Object[] elements = getArray(); 6. int len = elements.length; 7. Object[] newElements = Arrays.copyOf(elements, len + 1); 8. newElements[len] = e; 9. setArray(newElements); return true; } finally { lock.unlock(); } } 可以看到在写入的时候 使用了ReentrantLock进行控制 ,可以看到在第7步,CopyOnWriteArrayList是先复制一个当前的list,并且在复制的list进行写入,然后写入成功,在步骤9将新的list赋值给当前的list