1. 程式人生 > >3.3.5 高效讀取:不變模式下的CopyOnWriteArrayList

3.3.5 高效讀取:不變模式下的CopyOnWriteArrayList

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