java并发编程(十九)----(JUC集合)总体框架介绍
本节我们将继续学习JUC包中的集合类,我们知道jdk中本身自带了一套非线程安全的集合类,我们先温习一下java集合包里面的集合类,然后系统的看一下JUC包里面的集合类到底有什么不同。
java集合类
java集合类里面主要包含两大类:一类是Collection接口下的List、Set和Queue接口,一类是Map接口。
List的主要实现类包括:
ArrayList:数组实现的队列,它是一个动态数组;它不是线程安全的,只适用于单线程;
LinkedList:双重链表实现的队列,它也不是线程安全的,只适用于单线程;
Stack:表示后进先出(LIFO)的对象堆栈,继承于Vector,他是线程安全的;
Vector:可以实现可增长的对象数组,与数组一样,它包含可以使用整数索引进行访问的组件。此类是线程安全的。
Set的主要实现类包括:
HashSet:由哈希表(实际上是一个 HashMap 实例)支持。该集合元素不可重复,它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变,并且此实现不是同步的;
TreeSet:基于 TreeMap 的 NavigableSet 实现,也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;该类的实现也不是同步的;
LinkedHashSet:元素是有序的,维护着一个运行于所有条目的双重链接列表;此实现不是同步的;
Map的主要实现类包括:
HashMap:基于哈希表的 Map 接口的实现。此实现不是同步的;
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现,该类的<k,v>是有序的此实现不是同步的;
HashTable:与HashMap一样都是基于哈希表的Map实现,但是此类是线程安全的;
WeakHashMap:以弱键 实现的基于哈希表的 Map。在 WeakHashMap 中,当某个键不再正常使用时,将自动移除其条目。该类是非线程安全的。
上面这些是传统的java集合类,他们大多数都不是线程安全的,所以在同步并发中对他们的使用率并不高,为了线程安全以及开发人员在使用集合工具的同时不必去维护线程安全,Doug Lea在JUC(java.util.concurrent)包中添加了java集合包中单线程类的对应的支持高并发的类。下面我们一起来看一下这些并发集合类。
JUC集合类
List的主要实现类包括:

CopyOnWriteArrayList:相当于线程安全的ArrayList,它实现了List接口,他是线程安全的。
Set的主要实现类包括:

CopyOnWriteArraySet:相当于线程安全的HashSet,内部使用 CopyOnWriteArrayList 。
ConcurrentSkipListSet:一个基于 ConcurrentSkipListMap 的可缩放并发 NavigableSet 实现,内部排序是有序的。
Map的主要实现类包括:

ConcurrentHashMap:支持获取的完全并发和更新的所期望可调整并发的哈希表。
ConcurrentSkipListMap:可缩放的并发 ConcurrentNavigableMap 实现,内部排序是有序的Map,该类为线程安全的。
Queue的主要实现类包括:

ArrayBlockingQueue:一个由数组支持的有界阻塞队列。此队列按 FIFO(先进先出)原则对元素进行排序;
LinkedBlockingQueue:一个基于已链接节点的、范围任意的 blocking queue。此队列按 FIFO(先进先出)排序元素;
LinkedBlockingDeque:一个基于已链接节点的、任选范围的阻塞双端队列;
ConcurrentLinkedQueue:一个基于链接节点的无界线程安全队列。此队列按照 FIFO(先进先出)原则对元素进行排序;
ConcurrentLinkedDeque:是双向链表实现的无界队列,该队列同时支持FIFO和FILO两种操作方式。
下一节我们将一起详细的来分析JUC中的集合工具的使用和原理。
java并发编程(十九)----(JUC集合)总体框架介绍的更多相关文章
- java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue. LinkedBlockingQueue 队列是Blo ...
- java并发编程工具类JUC第八篇:ConcurrentHashMap
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...
- java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列
在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...
- Java并发编程(08):Executor线程池框架
本文源码:GitHub·点这里 || GitEE·点这里 一.Executor框架简介 1.基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的 ...
- Java并发(十九):final实现原理
final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量. 一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编 ...
- 夯实Java基础(十九)——集合
1.前言 集合在Java中的地位想必大家都知道,不用多BB了.无论是在我们现在的学习中还是在今后的工作中,集合这样一个大家族都无处不在,无处不用.在前面讲到的数组也是一个小的容器,但是数组不是面向对象 ...
- Java 集合总体框架介绍
Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合 ...
- java并发编程(九)----(JUC)CyclicBarrier
上一篇我们介绍了CountDownlatch,我们知道CountDownlatch是"在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待",即CountDownL ...
- Java并发编程 (十) 多线程并发拓展
个人博客网:https://wushaopei.github.io/ (你想要这里多有) 一.死锁 1.死锁的定义 所谓的死锁是指两个或两个以上的线程在等待执行的过程中,因为竞争资源而造成的一种 ...
随机推荐
- Redis在.net 环境下的使用
Redis概念 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库,和Memcached类似,它支持存储的value类型相对更多,包括st ...
- ReentrantLock源码的一点总结
ReentrantLock 是可重入锁,可重入锁的意思就是同一个线程可以重复获得该锁. 如何做到可重复获得该锁?计数器实现. 第一次加锁,cas比较是不是0,是0设置为1,并设置当前拥有锁的线程: 第 ...
- 寻觅Azure上的Athena和BigQuery (二):神奇的PolyBase
前情回顾 在“数据湖”概念与理论逐渐深入人心的今天,面向云存储的交互式查询这个需求场景显得愈发重要.这是因为原生的云存储(主要指S3这样的对象存储)既能够容纳大容量的明细数据,又能在性能和成本间取得一 ...
- 上传文件不落地转Base64字符串
1. 问题描述 因需调用第三方公司的图像识别接口,入参是:证件类型.图像类型.图片base64字符串,采用http+json格式调用. 本来采用的方式是:前端对图片做base64处理,后端组装下直接调 ...
- Thread-Per-Message设计模式
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; public class Te ...
- 个人永久性免费-Excel催化剂功能第31波-数量金额分组凑数功能,财务表哥表姐最爱
在财务工作过程中,很大时候需要使用到凑数的需求,花了两三天时间认真研究了一下,本人水平也只能做代码搬运工,在用户体验上作了一下完善.完成了Excel版的凑数功能. 文章出处说明 原文在简书上发表,再同 ...
- [leetcode] 80. Remove Duplicates from Sorted Array II (Medium)
排序数组去重题,保留重复两个次数以内的元素,不申请新的空间. 解法一: 因为已经排好序,所以出现重复的话只能是连续着,所以利用个变量存储出现次数,借此判断. Runtime: 20 ms, faste ...
- 基于python图片识别工具(图片识别,车牌,PDF,验证码)
先上图 不多说. 对于一般的用户来说识别率还是能达到百分之90以上. 已经打包成exe文件.windows用户可以直接使用.要软件的加我QQ python代码: # -*- coding: UTF- ...
- Android入门简介
GeoQuiz应用是由一个activity和一个布局(layout)组成. activity是Android SDK中Activity类的一个具体实例,负责管理用户与信息屏的交互. 布局定义了一系列用 ...
- 小白学python-day03-系统位数、变量、用户输入、if else
今天是day03,以下是学习总结. 但行努力,莫问前程. ----------------------------------------------------------------------- ...