併發程式設計從零開始(六)-BlockingDeque+CopyOnWrite
阿新 • • 發佈:2021-10-27
併發程式設計從零開始(六)-BlockingDeque+CopyOnWrite
5.2 BlockingDeque
BlockingDeque定義了一個阻塞的雙端佇列介面:
該介面繼承了BlockingQueue介面,同時增加了對應的雙端佇列操作介面。該介面只有一個實現,就是LinkedBlockingDeque,其核心資料結構如下所示,是一個雙向連結串列。
對應的實現原理,和LinkedBlockingQueue基本一樣,只是LinkedBlockingQueue是單向連結串列,而LinkedBlockingDeque是雙向連結串列。
5.3 CopyOnWrite
CopyOnWrite指在“寫”的時候,不是直接“寫”源資料,而是把資料拷貝一份進行修改,再通過悲觀鎖或者樂觀鎖的方式寫回。那為什麼不直接修改,而是要拷貝一份修改呢?
5.3.1 CopyOnWriteArrayList
和ArrayList一樣,CopyOnWriteArrayList的核心資料結構也是一個數組:
讀取資料的方法有:
所有讀的方法都沒有加鎖,但是所有的修改操作都加了鎖。
其他修改方法,例如remove和add類似,此處不再詳述。
5.3.2 CopyOnWriteArraySet
CopyOnWriteArraySet 就是用 Array 實現的一個 Set,保證所有元素都不重複。其內部是封裝的一個CopyOnWriteArrayList。