并发编程从零开始(六)-BlockingDeque+CopyOnWrite
2024-09-07 10:52:34
并发编程从零开始(六)-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。
最新文章
- Connect is a middleware layer for Node.js
- <;hr/>; 水平线样式
- PHP 函数
- Android 使用Fragment,ViewPagerIndicator 制作csdn app主要框架
- Codeforces Round #276 (Div. 2)
- Server.UrlEncode、HttpUtility.UrlDecode的区别
- div+css登陆界面案例
- 解析CSS加密技术之“障眼法”
- [HttpClient]SSL双向实例
- 在服务 ObtainData 实现的协定列表中找不到协定名称 ";IMetadataExchange";。将 ServiceMetadataBehavior 添加到配置文件或直接添加到 ServiceHost,以启用对该协定的支持。
- 2015 UESTC Winter Training #7【2010-2011 Petrozavodsk Winter Training Camp, Saratov State U Contest】
- Magicodes.NET框架
- CSS传统布局之页面布局实例
- IE兼容问题及处理
- MySQL集群PXC的搭建
- 使用BIOS进行键盘输入和磁盘读写
- JDBC连接
- Python中os模块使用方法
- 自己写一个java的mvc框架吧(三)
- iOS完全自学手册——[一]Ready?No!
热门文章
- Linux - 安装 ant
- poll?transport=longpoll&;connection...烦人的请求c
- outerHTML和outerText的赋值是异步的
- C# 下载远程http文件到本地
- selenium-ide-2.3.0 组件在foxfire45.0无法安装的问题
- Tars | 第0篇 腾讯犀牛鸟开源人才培养计划Tars实战笔记目录
- 基于Typora的Latex代码书写并移植到word中
- 用Python实现童年的21款小游戏,有你玩过的吗?(不要错过哦)
- PHP的OpenSSL加密扩展学习(三):证书操作
- css3 图片变黑白 filter