Java 并发之 ConcurrentSkipListMap 简述
2016-03-10 16:05
746 查看
JCIP 提到了在 Java 6 中引入了两个新的并发集合类
跳表是一种采用了用空间换时间思想的数据结构。它会随机地将一些节点提升到更高的层次,以创建一种逐层的数据结构,以提高操作的速度。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/10/8f1e5dda701f267b10df96ed33b73386.png)
CSLM 实现了
这篇文章主要是在讲跳表在 CSLM 中是如何实现的,其使用的源代码应是 JDK 6 中的,CSLM 的实现在 JDK 7 和 JDK 8 中都有变化。而对于 CSLM 是如何实现线程安全的,这篇文章没有涉及。
这篇文章的图有一点小错误
无锁HashMap的原理与实现
PS. 跳表的时间复杂度怎么算的,算法导论没看完啊
ConcurrentSkipListMap和
ConcurrentSkipListSet。其实只要介绍一下
ConcurrentSkipListMap即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,因此它可以在多线程环境中弥补
ConcurrentHashMap不支持排序的功能不足。从名字上就可以看出 CSLM 是基于 SkipList 跳表实现。学过算法的同学应该对跳表不陌生。不过还是要简单说一下跳表。
跳表是一种采用了用空间换时间思想的数据结构。它会随机地将一些节点提升到更高的层次,以创建一种逐层的数据结构,以提高操作的速度。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201603/10/8f1e5dda701f267b10df96ed33b73386.png)
CSLM 实现了
SortedMap、
NavigableMap、
ConcurrentNavigableMap等接口,所以它能提供丰富的操作。网上有些介绍 CSLM 的文章,相同的内容我就不再重复,列出这些文章的链接以供参考:
跳表的实现细节
Java多线程(四)之ConcurrentSkipListMap深入分析这篇文章主要是在讲跳表在 CSLM 中是如何实现的,其使用的源代码应是 JDK 6 中的,CSLM 的实现在 JDK 7 和 JDK 8 中都有变化。而对于 CSLM 是如何实现线程安全的,这篇文章没有涉及。
无锁线程安全容器的实现
一种基于CAS的无锁并发HashTable设计及C代码实现这篇文章的图有一点小错误
无锁HashMap的原理与实现
PS. 跳表的时间复杂度怎么算的,算法导论没看完啊
相关文章推荐
- spring 动态注册数据源
- Spring Bean 初始化过程
- java 线程池详解
- 详解Java GC的工作原理
- java file 海量文件处理
- JDK 源码设计 时间换空间 & 空间换时间
- Exception in thread "main" java.lang.LinkageError错误的解决
- myeclipse使用maven教程
- 《深入理解java虚拟机》学习笔记4——Java虚拟机垃圾收集器
- myeclipse 上安装 Maven3
- 各种 Java 的序列化库的性能比较测试结果
- eclipse JRebel 插件
- MyBatis-spring和spring JDBC批量插入Mysql的效率比较
- struts2 ognl java.lang.NoSuchMethodException Ljava.lang.String
- java clinit 死锁
- java.lang.NoSuchMethodError: javax.xml.ws.WebFault.messageName()Ljava/lang/Strin
- java 多线程下载图片
- java json lib 日期
- java cas
- 你能不能谈谈,java GC是在什么时候,对什么东西,做了什么事情?”