1. 程式人生 > 其它 >併發程式設計從零開始(六)-BlockingDeque+CopyOnWrite

併發程式設計從零開始(六)-BlockingDeque+CopyOnWrite

併發程式設計從零開始(六)-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。