并发编程从零开始(六)-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。

最新文章

  1. Connect is a middleware layer for Node.js
  2. <hr/> 水平线样式
  3. PHP 函数
  4. Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
  5. Codeforces Round #276 (Div. 2)
  6. Server.UrlEncode、HttpUtility.UrlDecode的区别
  7. div+css登陆界面案例
  8. 解析CSS加密技术之“障眼法”
  9. [HttpClient]SSL双向实例
  10. 在服务 ObtainData 实现的协定列表中找不到协定名称 "IMetadataExchange"。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost,以启用对该协定的支持。
  11. 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】
  12. Magicodes.NET框架
  13. CSS传统布局之页面布局实例
  14. IE兼容问题及处理
  15. MySQL集群PXC的搭建
  16. 使用BIOS进行键盘输入和磁盘读写
  17. JDBC连接
  18. Python中os模块使用方法
  19. 自己写一个java的mvc框架吧(三)
  20. iOS完全自学手册——[一]Ready?No!

热门文章

  1. Linux - 安装 ant
  2. poll?transport=longpoll&connection...烦人的请求c
  3. outerHTML和outerText的赋值是异步的
  4. C# 下载远程http文件到本地
  5. selenium-ide-2.3.0 组件在foxfire45.0无法安装的问题
  6. Tars | 第0篇 腾讯犀牛鸟开源人才培养计划Tars实战笔记目录
  7. 基于Typora的Latex代码书写并移植到word中
  8. 用Python实现童年的21款小游戏,有你玩过的吗?(不要错过哦)
  9. PHP的OpenSSL加密扩展学习(三):证书操作
  10. css3 图片变黑白 filter