Java 并发之 ConcurrentSkipListMap 简述
JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMap
和 ConcurrentSkipListSet
。其实只要介绍一下 ConcurrentSkipListMap
即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,因此它可以在多线程环境中弥补 ConcurrentHashMap
不支持排序的功能不足。从名字上就可以看出 CSLM 是基于 SkipList 跳表实现。学过算法的同学应该对跳表不陌生。不过还是要简单说一下跳表。
跳表是一种采用了用空间换时间思想的数据结构。它会随机地将一些节点提升到更高的层次,以创建一种逐层的数据结构,以提高操作的速度。
CSLM 实现了 SortedMap
、NavigableMap
、ConcurrentNavigableMap
等接口,所以它能提供丰富的操作。网上有些介绍 CSLM 的文章,相同的内容我就不再重复,列出这些文章的链接以供参考:
跳表的实现细节
- Java多线程(四)之ConcurrentSkipListMap深入分析
这篇文章主要是在讲跳表在 CSLM 中是如何实现的,其使用的源代码应是 JDK 6 中的,CSLM 的实现在 JDK 7 和 JDK 8 中都有变化。而对于 CSLM 是如何实现线程安全的,这篇文章没有涉及。
无锁线程安全容器的实现
一种基于CAS的无锁并发HashTable设计及C代码实现
这篇文章的图有一点小错误
无锁HashMap的原理与实现
PS. 跳表的时间复杂度怎么算的,算法导论没看完啊
Java 并发之 ConcurrentSkipListMap 简述相关推荐
- JAVA并发之多线程基础(2)
除了我们经常用的synchronized关键字(结合Object的wait()和notify()使用)之外,还有对应的上篇文章讲到的方法JAVA并发之多线程基础(1)之外,我们日常中使用到最多的也就是 ...
- JAVA并发之多线程基础(5)
上面介绍了并发编程中的栅栏等JAVA并发之多线程基础(4) .通过唯一的一个终点线来帮助确定线程是多晚开始执行下一次操作. LockSupport 提供了一个比较底层的线程挂起操作.有点类似于susp ...
- 我的Java开发之路
最近有一位小伙伴通过公众号给我留言, "我参加工作没多久,看着圈里的技术大牛,特别羡慕,也渴望成为技术大牛,想让您分享一下从小白到大牛是怎样练成的,我该如何提高自己" 首先,谢谢这 ...
- java并发之SynchronousQueue实现原理
前言 SynchronousQueue是一个比较特别的队列,由于在线程池方面有所应用,为了更好的理解线程池的实现原理,笔者花了些时间学习了一下该队列源码(JDK1.8),此队列源码中充斥着大量的CAS ...
- 你真的弄明白了吗?Java并发之AQS详解
你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...
- 面试:你说你精通Java并发,给我讲讲Java并发之J.U.C
转载自 面试:你说你精通Java并发,给我讲讲Java并发之J.U.C J.U.C J.U.C即java.util.concurrent包,为我们提供了很多高性能的并发类,可以说是java并发的核心. ...
- java并发初探ConcurrentSkipListMap
java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...
- java并发之CopyOnWriteArraySet
java并发之CopyOnWriteArraySet CopyOnWriteArraySet是基于CopyOnWriteArrayList实现的,持有CopyOnWriteArrayList的内部对象 ...
- java并发之CopyOnWirteArrayList
java并发之CopyOnWirteArrayList CopyOnWirteArrayList的实现 它用了ReentrantLock保证了add,set,remove操作的安全,同时使用volat ...
最新文章
- 十大成长型机器人技术大盘点
- 【408预推免复习】计算机网络(谢希仁第七版)第二章——物理层
- Python中常用字符串 函数-转
- linux promisc 作用,linux 下怎樣查看網卡是否支持混雜(promisc)模式
- php 替换 超链接,PHP移除字符串超链接文本的正则表达式
- 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
- 大数据之-Hadoop3.x_MapReduce工作流程---大数据之hadoop3.x工作笔记0109
- linux用户组和权限分配
- 如何设置固定宽度 td ?
- win10 查看系统开机历史记录
- MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)
- FlashBuilder环境下使用Starling出现的问题收集整理
- 解读微信团队的七个价值观
- 【预测模型】基于粒子群算法优化DBN深度置信网络实现数据预测matlab代码
- ua解析接口_蓝奏云直链解析API
- 北京大学创业训练营专家讲座:创新大师乔布斯的创业理念与营销哲学
- Mac电脑安装win7系统,解决前端IE浏览器兼容性问题
- Mac 终端 oh-my-zsh 配置,内含解决oh-my-zsh 下载不下来的方法
- processing画正多边形
- 线性代数常用基本知识整理