本节我们将继续学习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集合)总体框架介绍的更多相关文章

  1. java并发编程工具类JUC第四篇:LinkedBlockingQueue链表队列

    在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue. LinkedBlockingQueue 队列是Blo ...

  2. java并发编程工具类JUC第八篇:ConcurrentHashMap

    在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...

  3. java并发编程工具类JUC第七篇:BlockingDeque双端阻塞队列

    在之前的文章中已经为大家介绍了java并发编程的工具:BlockingQueue接口.ArrayBlockingQueue.DelayQueue.LinkedBlockingQueue.Priorit ...

  4. Java并发编程(08):Executor线程池框架

    本文源码:GitHub·点这里 || GitEE·点这里 一.Executor框架简介 1.基础简介 Executor系统中,将线程任务提交和任务执行进行了解耦的设计,Executor有各种功能强大的 ...

  5. Java并发(十九):final实现原理

    final在Java中是一个保留的关键字,可以声明成员变量.方法.类以及本地变量. 一旦你将引用声明作final,你将不能改变这个引用了,编译器会检查代码,如果你试图将变量再次初始化的话,编译器会报编 ...

  6. 夯实Java基础(十九)——集合

    1.前言 集合在Java中的地位想必大家都知道,不用多BB了.无论是在我们现在的学习中还是在今后的工作中,集合这样一个大家族都无处不在,无处不用.在前面讲到的数组也是一个小的容器,但是数组不是面向对象 ...

  7. Java 集合总体框架介绍

    Java集合是java提供的工具包,包含了常用的数据结构:集合.链表.队列.栈.数组.映射等.Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表.Set集合 ...

  8. java并发编程(九)----(JUC)CyclicBarrier

    上一篇我们介绍了CountDownlatch,我们知道CountDownlatch是"在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待",即CountDownL ...

  9. Java并发编程 (十) 多线程并发拓展

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 一.死锁 1.死锁的定义 所谓的死锁是指两个或两个以上的线程在等待执行的过程中,因为竞争资源而造成的一种 ...

随机推荐

  1. HDU 5534:Partial Tree(完全背包)***

    题目链接 题意 给出一个n个结点的树,给出n-1个度的权值f[],代表如果一个点的度数为i,那么它对于答案的贡献有f[i].问在这棵树最大的贡献能达到多少. 思路 对于这个图,有n*2-2个度可以分配 ...

  2. python爬虫登陆问题

    根据腾讯课堂网页登陆问题进行解说(需要安装谷歌浏览器): 1.导入库 import requests from selenium import webdriver 2.根据腾讯课堂链接,进入页面,获取 ...

  3. 【风哥干货】快速解决Oracle数据库故障必备的20个脚本与命令

    1.操作系统性能(通常故障出现时最先检查的内容)top.topas.vmstat.iostat.free.nmon 2.万能重启方法 如应急情况,需要重启数据库:tail -100f <对应路径 ...

  4. Bzoj 1997 [Hnoi2010]Planar题解

    1997: [Hnoi2010]Planar Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2224  Solved: 824[Submit][Stat ...

  5. [NOIP2013]华容道 题解(搜索)

    [NOIP2013]华容道 [题目描述] 这道题根据小时候玩华容道不靠谱的经验还以为是并查集,果断扑街.考后想想也是,数据这么小一定有他的道理. 首先由于是最小步数,所以BFS没跑了.那么我们大可把这 ...

  6. 【小家Spring】Spring IoC是如何使用BeanWrapper和Java内省结合起来给Bean属性赋值的

    #### 每篇一句 > 具备了技术深度,遇到问题可以快速定位并从根本上解决.有了技术深度之后,学习其它技术可以更快,再深入其它技术也就不会害怕 #### 相关阅读 [[小家Spring]聊聊Sp ...

  7. SpringCloud-Alibaba-Sentinel(1)初探

    Sentinel 是什么? Sentinel 具有以下特征: 丰富的应用场景:Sentinel 承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围) ...

  8. 2019暑假集训 Intervals

    题目描述 给定n个闭区间[ai,bi]和n个整数ci.你需要构造一个整数集合Z,使得对于任意i,Z中满足ai<=x<=bi的x不少于ci个.求Z集合中包含的元素个数的最小值.  输入 第一 ...

  9. sql 数据处理时join字段慎重选择--避免出现double数据!

    前几天做BI Tabular表格模型的时候,数据中心核对数据发现模型展现数据比实际数据要多,经过核查之后,发现原来我是一个不经意,在做数据选取的时候,inner join的字段CITY_NAME_CN ...

  10. 默认文档接卸--手机web app开发笔记(二)

    首先我们启动HBuilderX2.0 ,界面如图2-1所示 图2-1 软件开发界面 单击“文件—新建—项目”,弹出新建项目管理界面,我们在里面进行了项目类型选择“5+APP”.项目名称填写“编程之路” ...