BlockingDeque定义了一个阻塞的双端队列接口:
该接口继承了BlockingQueue接口,同时增加了对应的双端队列操作接口。该接口只有一个实现,就是LinkedBlockingDeque,其核心数据结构如下所示,是一个双向链表。
对应的实现原理,和LinkedBlockingQueue基本一样,只是LinkedBlockingQueue是单向链表,而LinkedBlockingDeque是双向链表。
CopyOnWrite指在“写”的时候,不是直接“写”源数据,而是把数据拷贝一份进行修改,再通过悲观锁或者乐观锁的方式写回。那为什么不直接修改,而是要拷贝一份修改呢?这是为了在“读”的时候不加锁,典型的空间换时间。
和ArrayList一样,CopyOnWriteArrayList的核心数据结构也是一个数组:
读取数据的方法有:
所有读的方法都没有加锁,但是所有的修改操作都加了锁。
其他修改方法,例如remove和add类似,此处不再详述。
CopyOnWriteArraySet 就是用 Array 实现的一个 Set,保证所有元素都不重复。其内部是封装的一个CopyOnWriteArrayList。