[Java多线程 九]---JUC包下并发集合类
来源:互联网 发布:2017dnf商人起步必知 编辑:程序博客网 时间:2024/05/17 02:42
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3498454.html
之前,在”Java 集合系列目录(Category)”中,讲解了Java集合包中的各个类。接下来,将展开对JUC包中的集合进行学习。在学习之前,先温习一下”Java集合包”
Java集合包
介绍java集合的架构。主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。本节只是进行一下概述,详细内容见之前在数据结构部分写的博文来回顾集合框架。
http://blog.csdn.net/sinat_33087001/article/details/73775688
主体内容包括Collection集合和Map类;而Collection集合又可以划分为List(队列)和Set(集合)。
Listd的实现类
List的实现类主要有: LinkedList, ArrayList, Vector, Stack。
LinkedList是双向链表实现的双端队列;它不是线程安全的,只适用于单线程。
ArrayList是数组实现的队列,它是一个动态数组;它也不是线程安全的,只适用于单线程。
Vector是数组实现的矢量队列,它也一个动态数组;不过和ArrayList不同的是,Vector是线程安全的,它支持并发。
Stack是Vector实现的栈;和Vector一样,它也是线程安全的。
Set的实现类
Set的实现类主要有: HastSet和TreeSet。
- HashSet 是一个没有重复元素的集合,它通过HashMap实现的;HashSet不是线程安全的,只适用于单线程。
- TreeSet也是一个没有重复元素的集合,不过和HashSet不同的是,TreeSet中的元素是有序的;它是通过TreeMap实现的;TreeSet也不是线程安全的,只适用于单线程。
Map的实现类
Map的实现类主要有: HashMap,WeakHashMap, Hashtable和TreeMap。
HashMap是存储“键-值对”的哈希表;它不是线程安全的,只适用于单线程。
WeakHashMap是也是哈希表;和HashMap不同的是,HashMap的“键”是强引用类型,而WeakHashMap的“键”是弱引用类型,也就是说当WeakHashMap 中的某个键不再正常使用时,会被从WeakHashMap中被自动移除,WeakHashMap也不是线程安全的,只适用于单线程。
Hashtable也是哈希表;和HashMap不同的是,Hashtable是线程安全的,支持并发。
TreeMap也是哈希表,不过TreeMap中的“键-值对”是有序的,它是通过R-B Tree(红黑树)实现的;TreeMap不是线程安全的,只适用于单线程。
如何线程安全
综合以上考虑,线程安全的实现类有vector,stack,hashtable 为了方便,我们将前面介绍集合类统称为”java集合包“。java集合包大多是“非线程安全的”,虽然可以通过Collections工具类中的方法获取java集合包对应的同步类,但是这些同步类的并发效率并不是很高。为了更好的支持高并发任务,并发大师Doug Lea在JUC(java.util.concurrent)包中添加了java集合包中单线程类的对应的支持高并发的类。
例如,ArrayList对应的高并发类是CopyOnWriteArrayList,HashMap对应的高并发类是ConcurrentHashMap,等等。
JUC中的集合类
下面,我们先了解JUC包中集合类的框架;为了方便讲诉,我将JUC包中的集合类划分为3部分来进行说明。在简单的了解JUC包中集合类的框架之后,后面的章节再逐步对各个类进行介绍。
JUC包中List和Set实现类
JUC集合包中的List和Set实现类包括: CopyOnWriteArrayList, CopyOnWriteArraySet和ConcurrentSkipListSet。ConcurrentSkipListSet稍后在说明Map时再说明,CopyOnWriteArrayList 和 CopyOnWriteArraySet的框架如下图所示:
1, CopyOnWriteArrayList相当于线程安全的ArrayList,它实现了List接口。CopyOnWriteArrayList是支持高并发的。
2,CopyOnWriteArraySet相当于线程安全的HashSet,它继承于AbstractSet类。CopyOnWriteArraySet 内部包含一个CopyOnWriteArrayList对象(聚合关系),它是通过CopyOnWriteArrayList实现的。
JUC包中Map实现类
JUC集合包中Map的实现类包括: ConcurrentHashMap和ConcurrentSkipListMap。它们的框架如下图所示:
ConcurrentHashMap是线程安全的哈希表(相当于线程安全的HashMap);它继承于AbstractMap类,并且实现ConcurrentMap接口。ConcurrentHashMap是通过“锁分段”来实现的,它支持并发。
-ConcurrentSkipListMap是线程安全的有序的哈希表(相当于线程安全的TreeMap); 它继承于AbstractMap类,并且实现ConcurrentNavigableMap接口。ConcurrentSkipListMap是通过“跳表”来实现的,它支持并发。
ConcurrentSkipListSet是线程安全的有序的集合(相当于线程安全的TreeSet);它继承于AbstractSet,并实现了NavigableSet接口。ConcurrentSkipListSet是通过ConcurrentSkipListMap实现的,它也支持并发。
JUC包中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多线程 九]---JUC包下并发集合类
- [Java多线程 九]---JUC包下并发集合类
- [Java多线程 六]---JUC并发包概述
- [Java多线程 六]---JUC并发包概述
- Java多线程---JUC包下的常见类
- java多线程--JUC集合框架
- Java多线程系列--“JUC集合”
- Java多线程--JUC集合--ConcurrentHashMap
- [Java多线程 十]---JUC包下线程池的理解
- [Java多线程 十]---JUC包下线程池的理解
- java并发编程(九)----(JUC)CyclicBarrier
- [Java多线程 八]---JUC包下的锁和工具类
- [Java多线程 八]---JUC包下的锁和工具类
- JUC-java并发集合源码解析
- JAVA多线程之——并发包JUC——Atomic
- Java多线程”JUC”集合中的CopyOnWriteArraySet
- [Java 多线程] 并发集合类
- Java多线程编程--(11)学习Java5.0 并发编程包--支持并发的集合类
- POJ 3580 SuperMemo(Splay树)
- CreateObject("Mercury.DeviceReplay")中的键盘值
- Android Studio中使用adb shell查看SharedPreferences文件
- 对 PInvoke 函数“...”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
- 主键外键与索引
- [Java多线程 九]---JUC包下并发集合类
- vs2013 InstallShield打包卸载程序
- 机器学习第十课part3之Boost总结
- LeetCode Construct String from Binary Tree
- 【datatable】Cannot read property 'style' of undefined问题解决
- boost------signals2的使用
- powerdesign安装步骤
- 【PHP】调整数组顺序使奇数位于偶数前(闭包扩展)
- Tomat介绍