JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMapConcurrentSkipListSet。其实只要介绍一下 ConcurrentSkipListMap 即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,因此它可以在多线程环境中弥补 ConcurrentHashMap 不支持排序的功能不足。从名字上就可以看出 CSLM 是基于 SkipList 跳表实现。学过算法的同学应该对跳表不陌生。不过还是要简单说一下跳表。

跳表是一种采用了用空间换时间思想的数据结构。它会随机地将一些节点提升到更高的层次,以创建一种逐层的数据结构,以提高操作的速度。

CSLM 实现了 SortedMapNavigableMapConcurrentNavigableMap 等接口,所以它能提供丰富的操作。网上有些介绍 CSLM 的文章,相同的内容我就不再重复,列出这些文章的链接以供参考:

跳表的实现细节

  • Java多线程(四)之ConcurrentSkipListMap深入分析

这篇文章主要是在讲跳表在 CSLM 中是如何实现的,其使用的源代码应是 JDK 6 中的,CSLM 的实现在 JDK 7 和 JDK 8 中都有变化。而对于 CSLM 是如何实现线程安全的,这篇文章没有涉及。

无锁线程安全容器的实现

  • 一种基于CAS的无锁并发HashTable设计及C代码实现

    这篇文章的图有一点小错误

  • 无锁HashMap的原理与实现

PS. 跳表的时间复杂度怎么算的,算法导论没看完啊

Java 并发之 ConcurrentSkipListMap 简述相关推荐

  1. JAVA并发之多线程基础(2)

    除了我们经常用的synchronized关键字(结合Object的wait()和notify()使用)之外,还有对应的上篇文章讲到的方法JAVA并发之多线程基础(1)之外,我们日常中使用到最多的也就是 ...

  2. JAVA并发之多线程基础(5)

    上面介绍了并发编程中的栅栏等JAVA并发之多线程基础(4) .通过唯一的一个终点线来帮助确定线程是多晚开始执行下一次操作. LockSupport 提供了一个比较底层的线程挂起操作.有点类似于susp ...

  3. 我的Java开发之路

    最近有一位小伙伴通过公众号给我留言, "我参加工作没多久,看着圈里的技术大牛,特别羡慕,也渴望成为技术大牛,想让您分享一下从小白到大牛是怎样练成的,我该如何提高自己" 首先,谢谢这 ...

  4. java并发之SynchronousQueue实现原理

    前言 SynchronousQueue是一个比较特别的队列,由于在线程池方面有所应用,为了更好的理解线程池的实现原理,笔者花了些时间学习了一下该队列源码(JDK1.8),此队列源码中充斥着大量的CAS ...

  5. 你真的弄明白了吗?Java并发之AQS详解

    你真的弄明白了吗?Java并发之AQS详解 带着问题阅读 1.什么是AQS,它有什么作用,核心思想是什么 2.AQS中的独占锁和共享锁原理是什么,AQS提供的锁机制是公平锁还是非公平锁 3.AQS在J ...

  6. 面试:你说你精通Java并发,给我讲讲Java并发之J.U.C

    转载自 面试:你说你精通Java并发,给我讲讲Java并发之J.U.C J.U.C J.U.C即java.util.concurrent包,为我们提供了很多高性能的并发类,可以说是java并发的核心. ...

  7. java并发初探ConcurrentSkipListMap

    java并发初探ConcurrentSkipListMap ConcurrentSkipListMap以调表这种数据结构以空间换时间获得效率,通过volatile和CAS操作保证线程安全,而且它保证了 ...

  8. java并发之CopyOnWriteArraySet

    java并发之CopyOnWriteArraySet CopyOnWriteArraySet是基于CopyOnWriteArrayList实现的,持有CopyOnWriteArrayList的内部对象 ...

  9. java并发之CopyOnWirteArrayList

    java并发之CopyOnWirteArrayList CopyOnWirteArrayList的实现 它用了ReentrantLock保证了add,set,remove操作的安全,同时使用volat ...

最新文章

  1. 十大成长型机器人技术大盘点
  2. 【408预推免复习】计算机网络(谢希仁第七版)第二章——物理层
  3. Python中常用字符串 函数-转
  4. linux promisc 作用,linux 下怎樣查看網卡是否支持混雜(promisc)模式
  5. php 替换 超链接,PHP移除字符串超链接文本的正则表达式
  6. 应用filestream设置时存在未知错误_开机黑屏?常见启动黑屏错误的中文解释!学习电脑知识电脑小匠...
  7. 大数据之-Hadoop3.x_MapReduce工作流程---大数据之hadoop3.x工作笔记0109
  8. linux用户组和权限分配
  9. 如何设置固定宽度 td ?
  10. win10 查看系统开机历史记录
  11. MySQL Study之--MySQL下图形工具的使用(phpMyAdmin)
  12. FlashBuilder环境下使用Starling出现的问题收集整理
  13. 解读微信团队的七个价值观
  14. 【预测模型】基于粒子群算法优化DBN深度置信网络实现数据预测matlab代码
  15. ua解析接口_蓝奏云直链解析API
  16. 北京大学创业训练营专家讲座:创新大师乔布斯的创业理念与营销哲学
  17. Mac电脑安装win7系统,解决前端IE浏览器兼容性问题
  18. Mac 终端 oh-my-zsh 配置,内含解决oh-my-zsh 下载不下来的方法
  19. processing画正多边形
  20. 线性代数常用基本知识整理

热门文章

  1. Linux命令su和sudo的区别在哪?各有什么用途?
  2. Java基础知识篇(2020最新版) 准备放进收藏夹吃灰的勿进
  3. 更改GROOVE的文件夹位置
  4. 非常好用的java代码检测工具
  5. APB协议UVM验证环境的搭建
  6. plsa java_plsa代码实现 | 学步园
  7. 百度AI赋能,人民日报创作大脑发布
  8. Linux内核修炼之道 之 前言
  9. 小学计算机教案设计ppt,第1课 制作简单的幻灯片;
  10. eclipse打开新工作空间,个人偏好设置问题