Java concurrency之集合_动力节点Java学院整理

发布时间 - 2026-01-11 01:50:46    点击率:

Java集合包

Java集合主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。

1. List的实现类主要有: LinkedList, ArrayList, Vector, Stack。

(01) LinkedList是双向链表实现的双端队列;它不是线程安全的,只适用于单线程。

(02) ArrayList是数组实现的队列,它是一个动态数组;它也不是线程安全的,只适用于单线程。

(03) Vector是数组实现的矢量队列,它也一个动态数组;不过和ArrayList不同的是,Vector是线程安全的,它支持并发。

(04) Stack是Vector实现的栈;和Vector一样,它也是线程安全的。 

2. Set的实现类主要有: HastSet和TreeSet。

(01) HashSet是一个没有重复元素的集合,它通过HashMap实现的;HashSet不是线程安全的,只适用于单线程。

(02) TreeSet也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;它是通过TreeMap实现的;TreeSet也不是线程安全的,只适用于单线程。 

3.Map的实现类主要有: HashMap,WeakHashMap, Hashtable和TreeMap。
(01) HashMap是存储“键-值对”的哈希表;它不是线程安全的,只适用于单线程。

(02) WeakHashMap是也是哈希表;和HashMap不同的是,HashMap的“键”是强引用类型,而WeakHashMap的“键”是弱引用类型,也就是说当WeakHashMap 中的某个键不再正常使用时,会被从WeakHashMap中被自动移除。WeakHashMap也不是线程安全的,只适用于单线程。

(03) Hashtable也是哈希表;和HashMap不同的是,Hashtable是线程安全的,支持并发。

(04) TreeMap也是哈希表,不过TreeMap中的“键-值对”是有序的,它是通过R-B Tree(红黑树)实现的;TreeMap不是线程安全的,只适用于单线程。

更多关于这些集合类的介绍,可以参考“Java 集合系列目录(Category)”。

为了方便,我们将前面介绍集合类统称为”java集合包“。java集合包大多是“非线程安全的”,虽然可以通过Collections工具类中的方法获取java集合包对应的同步类,但是这些同步类的并发效率并不是很高。为了更好的支持高并发任务,并发大师Doug Lea在JUC(java.util.concurrent)包中添加了java集合包中单线程类的对应的支持高并发的类。例如,ArrayList对应的高并发类是CopyOnWriteArrayList,HashMap对应的高并发类是ConcurrentHashMap,等等。

JUC包在添加”java集合包“对应的高并发类时,为了保持API接口的一致性,使用了”Java集合包“中的框架。例如,CopyOnWriteArrayList实现了“Java集合包”中的List接口,HashMap继承了“java集合包”中的AbstractMap类,等等。得益于“JUC包使用了Java集合包中的类”,如果我们了解了Java集合包中的类的思想之后,理解JUC包中的类也相对容易;理解时,最大的难点是,对JUC包是如何添加对“高并发”的支持的!

JUC中的集合类

下面,我们先了解JUC包中集合类的框架;为了方便讲诉,我将JUC包中的集合类划分为3部分来进行说明。在简单的了解JUC包中集合类的框架之后,后面的章节再逐步对各个类进行介绍。

1. List和Set

JUC集合包中的List和Set实现类包括: CopyOnWriteArrayList, CopyOnWriteArraySet和ConcurrentSkipListSet。

ConcurrentSkipListSet稍后在说明Map时再说明,CopyOnWriteArrayList 和 CopyOnWriteArraySet的框架如下图所示:

(01) CopyOnWriteArrayList相当于线程安全的ArrayList,它实现了List接口。CopyOnWriteArrayList是支持高并发的。

(02) CopyOnWriteArraySet相当于线程安全的HashSet,它继承于AbstractSet类。CopyOnWriteArraySet内部包含一个CopyOnWriteArrayList对象,它是通过CopyOnWriteArrayList实现的。

2. Map

JUC集合包中Map的实现类包括: ConcurrentHashMap和ConcurrentSkipListMap。它们的框架如下图所示:

(01) ConcurrentHashMap是线程安全的哈希表(相当于线程安全的HashMap);它继承于AbstractMap类,并且实现ConcurrentMap接口。ConcurrentHashMap是通过“锁分段”来实现的,它支持并发。

(02) ConcurrentSkipListMap是线程安全的有序的哈希表(相当于线程安全的TreeMap); 它继承于AbstractMap类,并且实现ConcurrentNavigableMap接口。ConcurrentSkipListMap是通过“跳表”来实现的,它支持并发。

(03) ConcurrentSkipListSet是线程安全的有序的集合(相当于线程安全的TreeSet);它继承于AbstractSet,并实现了NavigableSet接口。ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的,它也支持并发。

3. Queue

JUC集合包中Queue的实现类包括: ArrayBlockingQueue, LinkedBlockingQueue, LinkedBlockingDeque, ConcurrentLinkedQueue和ConcurrentLinkedDeque。它们的框架如下图所示:

(01) ArrayBlockingQueue是数组实现的线程安全的有界的阻塞队列。

(02) LinkedBlockingQueue是单向链表实现的(指定大小)阻塞队列,该队列按 FIFO(先进先出)排序元素。

(03) LinkedBlockingDeque是双向链表实现的(指定大小)双向并发阻塞队列,该阻塞队列同时支持FIFO和FILO两种操作方式。

(04) ConcurrentLinkedQueue是单向链表实现的无界队列,该队列按 FIFO(先进先出)排序元素。

(05) ConcurrentLinkedDeque是双向链表实现的无界队列,该队列同时支持FIFO和FILO两种操作方式。


# java  # concurrency集合  # concurrency  # Java concurrency集合之CopyOnWriteArraySet_动力节点Java学院整  # Java concurrency集合之ConcurrentLinkedQueue_动力节点Java学  # Java concurrency集合之ConcurrentSkipListMap_动力节点Java学  # Java concurrency集合之ConcurrentSkipListSet_动力节点Java学  # Java concurrency集合之ConcurrentHashMap_动力节点Java学院整理  # Java concurrency集合之ArrayBlockingQueue_动力节点Java学院整理  # Java concurrency集合之 CopyOnWriteArrayList_动力节点Java学  # Java concurrency集合之LinkedBlockingDeque_动力节点Java学院整  # 包中  # 适用于  # 单线程  # 的是  # 它是  # 链表  # 所示  # 它也  # 如下图  # 两种  # 实现了  # 主要有  # 来实现  # 划分为  # 是一个  # 使用了  # 无界  # 很高  # 可以通过  # 我将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在Tomcat中配置并部署网站项目?  如何制作一个表白网站视频,关于勇敢表白的小标题?  🚀拖拽式CMS建站能否实现高效与个性化并存?  详解Android图表 MPAndroidChart折线图  大学网站设计制作软件有哪些,如何将网站制作成自己app?  nginx修改上传文件大小限制的方法  Windows10电脑怎么查看硬盘通电时间_Win10使用工具检测磁盘健康  Laravel如何处理文件下载请求?(Response示例)  北京网站制作的公司有哪些,北京白云观官方网站?  如何用景安虚拟主机手机版绑定域名建站?  Laravel如何使用集合(Collections)进行数据处理_Laravel Collection常用方法与技巧  Laravel怎么生成URL_Laravel路由命名与URL生成函数详解  西安专业网站制作公司有哪些,陕西省建行官方网站?  Laravel如何自定义错误页面(404, 500)?(代码示例)  如何在 Pandas 中基于一列条件计算另一列的分组均值  EditPlus中的正则表达式 实战(2)  Laravel如何实现数据库事务?(DB Facade示例)  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  中国移动官方网站首页入口 中国移动官网网页登录  JS中对数组元素进行增删改移的方法总结  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  如何基于PHP生成高效IDC网络公司建站源码?  Laravel如何配置和使用缓存?(Redis代码示例)  Laravel怎么在Controller之外的地方验证数据  微信小程序制作网站有哪些,微信小程序需要做网站吗?  html5audio标签播放结束怎么触发事件_onended回调方法【教程】  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  在Oracle关闭情况下如何修改spfile的参数  零服务器AI建站解决方案:快速部署与云端平台低成本实践  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel如何生成API文档?(Swagger/OpenAPI教程)  LinuxShell函数封装方法_脚本复用设计思路【教程】  5种Android数据存储方式汇总  想要更高端的建设网站,这些原则一定要坚持!  如何在腾讯云免费申请建站?  潮流网站制作头像软件下载,适合母子的网名有哪些?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  Laravel如何使用查询构建器?(Query Builder高级用法)  青岛网站建设如何选择本地服务器?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel API资源类怎么用_Laravel API Resource数据转换