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. 跳錶的時間複雜度怎麼算的,算法導論沒看完啊併發