编程语言
首页 > 编程语言> > 并发编程从零开始(六)-BlockingDeque+CopyOnWrite

并发编程从零开始(六)-BlockingDeque+CopyOnWrite

作者:互联网

并发编程从零开始(六)-BlockingDeque+CopyOnWrite

5.2 BlockingDeque

BlockingDeque定义了一个阻塞的双端队列接口:

image-20211027144614052

该接口继承了BlockingQueue接口,同时增加了对应的双端队列操作接口。该接口只有一个实现,就是LinkedBlockingDeque,其核心数据结构如下所示,是一个双向链表。

image-20211027144914254

对应的实现原理,和LinkedBlockingQueue基本一样,只是LinkedBlockingQueue是单向链表,而LinkedBlockingDeque是双向链表。


5.3 CopyOnWrite

CopyOnWrite指在“写”的时候,不是直接“写”源数据,而是把数据拷贝一份进行修改,再通过悲观锁或者乐观锁的方式写回。那为什么不直接修改,而是要拷贝一份修改呢?这是为了在“读”的时候不加锁,典型的空间换时间。

5.3.1 CopyOnWriteArrayList

和ArrayList一样,CopyOnWriteArrayList的核心数据结构也是一个数组:

image-20211027145253619

读取数据的方法有:

image-20211027145327770

所有读的方法都没有加锁,但是所有的修改操作都加了锁。

image-20211027151752992

image-20211027151804294

其他修改方法,例如remove和add类似,此处不再详述。

5.3.2 CopyOnWriteArraySet

CopyOnWriteArraySet 就是用 Array 实现的一个 Set,保证所有元素都不重复。其内部是封装的一个CopyOnWriteArrayList。

image-20211027151923141

标签:CopyOnWriteArrayList,5.3,CopyOnWrite,接口,链表,从零开始,BlockingDeque
来源: https://www.cnblogs.com/yangchen-geek/p/15470912.html