4.5.3寫時複製容器CopyOnWriteArrayList和CopyOnWriteArraySet理解、有點和使用場景

理解

CopyOnWrite就是寫時複製容器。在寫入數據的時候,會從源容器複製出一個新容器,然後在新容器中添加元素,添加完成之後,再讓源容器指針指向新容器。

寫時複製容器的好處

可以對CopyOnWrite併發讀取,而不需要加鎖,因爲當前容器不會添加任何元素。

這是一種讀寫分離的思想,讀和寫分別使用不同的容器

寫時複製容器的缺點

1、每次修改都會新建一個數組,如果源數組很大,修改操作比較頻繁,性能就會很低,內存會有大開銷

2、數據一致性問題:因爲修改並不會馬上就能夠被讀到,即只能保證最終一致性,不能保證實時一致性。

適用場景:

多讀少寫的場景,比如白名單黑名單商品類目的訪問,因爲大多數是讀,偶爾修改;

舉例:

假如我們有一個商品的搜索網站,搜索的時候有些關鍵詞是需要被屏蔽掉的,這個時候就可以使用CopyOnWrite存放不能搜索的黑名單,如果用戶搜索的關鍵詞在黑名單中,就提示不能搜索

使用寫時複製容器需要注意的事情:

1、儘量在初始化的時候指定容器大小,避免容器擴容產生的開銷

2、寫入數據的時候,最好一次性寫入,防止多次複製

demo:把數據放在List中,一次性寫入寫時複製容器

public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        CopyOnWriteArrayList copyOnWriteArrayList = new CopyOnWriteArrayList(list);
    }
}

常用方法

寫時複製容器常用方法和普通集合差不多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章