zoukankan      html  css  js  c++  java
  • 关于ConcurrentSkipListMap的理解

    一、前言 

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

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

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

    跳表的实现细节

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

    无锁线程安全容器的实现

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

    concurrentHashMap与ConcurrentSkipListMap性能测试

    在4线程1.6万数据的条件下,ConcurrentHashMap 存取速度是ConcurrentSkipListMap 的4倍左右。

    但ConcurrentSkipListMap有几个ConcurrentHashMap 不能比拟的优点

    1、ConcurrentSkipListMap 的key是有序的。

    2、ConcurrentSkipListMap 支持更高的并发。ConcurrentSkipListMap 的存取时间是log(N),和线程数几乎无关。也就是说在数据量一定的情况下,并发的线程越多,ConcurrentSkipListMap越能体现出他的优势。

  • 相关阅读:
    Android UI基本结构
    深入理解 Java中的 流 (Stream)
    StringBuffer和StringBuild区别
    HttpClient和HttpURLConnection的区别
    Http会话
    WKWebView 实现iOS与H5的交互<转>
    UIVisualEffectView实现毛玻璃效果
    Mac下配置Eclipse <转>
    最新 macOS Sierra 10.12.3 安装CocoaPods及使用详解<转>
    Bitcode是什么,如何配置?
  • 原文地址:https://www.cnblogs.com/shamo89/p/6708624.html
Copyright © 2011-2022 走看看