3.3.5 高效讀取:不變模式下的CopyOnWriteArrayList
阿新 • • 發佈:2018-02-24
true ray 新的 nts ont image public bool write
源碼分析:讀寫(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
3.3.5 高效讀取:不變模式下的CopyOnWriteArrayList