JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMap
和 ConcurrentSkipListSet
。其实只要介绍一下 ConcurrentSkipListMap
便可(后面简称为 CSLM),由于咱们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,所以它能够在多线程环境中弥补 ConcurrentHashMap
不支持排序的功能不足。从名字上就能够看出 CSLM 是基于 SkipList 跳表实现。学过算法的同窗应该对跳表不陌生。不过仍是要简单说一下跳表。html
跳表是一种采用了用空间换时间思想的数据结构。它会随机地将一些节点提高到更高的层次,以建立一种逐层的数据结构,以提升操做的速度。算法
CSLM 实现了 SortedMap
、NavigableMap
、ConcurrentNavigableMap
等接口,因此它能提供丰富的操做。网上有些介绍 CSLM 的文章,相同的内容我就再也不重复,列出这些文章的连接以供参考:shell
这篇文章主要是在讲跳表在 CSLM 中是如何实现的,其使用的源代码应是 JDK 6 中的,CSLM 的实如今 JDK 7 和 JDK 8 中都有变化。而对于 CSLM 是如何实现线程安全的,这篇文章没有涉及。安全
一种基于CAS的无锁并发HashTable设计及C代码实现 这篇文章的图有一点小错误数据结构
PS. 跳表的时间复杂度怎么算的,算法导论没看完啊并发