原创 [學習筆記-Java併發源碼-2] volatile的實現原理

  volatile這個關鍵字可能很多朋友都聽說過,或許也都用過。在Java 5之前,它是一個備受爭議的關鍵字,因爲在程序中使用它往往會導致出人意料的結果。在Java 5之後,volatile關鍵字才得以重獲生機。 volatile關鍵字雖

原创 [學習筆記-Java併發源碼-1] synchronized的實現原理

在Java中,如果一遇到多線程情況需要解決,我們想到最多的可能就是synchronized。或者叫它“同步”,很早以前或許synchronized是一個重量級鎖,相對於Lock,它會顯得那麼笨重,以至於我們慢慢摒棄它。 但是早在 Javs

原创 [學習筆記-Java併發源碼] 目錄

本系列開始記錄針對java併發體系的相關源碼學習。大部分來之網絡內容,只是自己整理與總結之用。 synchronized synchronized的實現原理 AQS

原创 [學習筆記-Java集合-17] Queue - DelayQueue源碼分析

介紹 DelayQueue是java併發包下的延時阻塞隊列,常用於實現定時任務。 繼承體系 從繼承體系可以看到,DelayQueue實現了BlockingQueue,所以它是一個阻塞隊列。 另外,DelayQueue還組合了一個叫做Del

原创 [學習筆記-Java集合-16] Queue - LinkedBlockingQueue源碼分析

介紹 LinkedBlockingQueue是java併發包下一個以單鏈表實現的阻塞隊列,它是線程安全的,至於它是不是有界的,請看下面的分析。 源碼分析 主要屬性 // 容量 private final int capacity; //

原创 [學習筆記-Java集合-15] Queue - ArrayBlockingQueue源碼分析

介紹 ArrayBlockingQueue是java併發包下一個以數組實現的阻塞隊列,它是線程安全的,至於是否需要擴容,請看下面的分析。 隊列 隊列,是一種線性表,它的特點是先進先出,又叫FIFO,就像我們平常排隊一樣,先到先得,即先進入隊

原创 [學習筆記-Java集合-14] Queue - PriorityQueue源碼分析

介紹 優先級隊列,是0個或多個元素的集合,集合中的每個元素都有一個權重值,每次出隊都彈出優先級最大或最小的元素。 一般來說,優先級隊列使用堆來實現。 源碼分析 主要屬性 // 默認容量 private static final

原创 [學習筆記-Java集合-13] Set - ConcurrentSkipListSet源碼分析

介紹 ConcurrentSkipListSet底層是通過ConcurrentNavigableMap來實現的,它是一個有序的線程安全的集合。 源碼分析 它的源碼比較簡單,跟通過Map實現的Set基本是一致,只是多了一些取最近的元素的方法。

原创 [學習筆記-Java集合-12] Set - CopyOnWriteArraySet源碼分析

介紹 CopyOnWriteArraySet底層是使用CopyOnWriteArrayList存儲元素的,所以它並不是使用Map來存儲元素的。 但是,我們知道CopyOnWriteArrayList底層其實是一個數組,它是允許元素重複的,那

原创 [學習筆記-Java集合-11] Map - ConcurrentSkipListMap源碼分析

介紹 跳錶是一個隨機化的數據結構,實質就是一種可以進行二分查找的有序鏈表。 跳錶在原有的有序鏈表上面增加了多級索引,通過索引來實現快速查找。 跳錶不僅能提高搜索性能,同時也可以提高插入和刪除操作的性能。 存儲結構 跳錶在原有的有序鏈表上面增

原创 [學習筆記-Java集合-10] Set - LinkedHashSet源碼分析

介紹 上一節我們說HashSet中的元素是無序的,那麼有沒有什麼辦法保證Set中的元素是有序的呢? 答案是當然可以。 LinkedHashSet就有這個功能,它是怎麼實現有序的呢? 源碼分析 LinkedHashSet繼承自HashSet,

原创 [學習筆記-Java集合-9] Set - HashSet源碼分析

簡介 集合,這個概念有點模糊。 廣義上來講,java中的集合是指java.util包下面的容器類,包括和Collection及Map相關的所有類。 中義上來講,我們一般說集合特指java集合中的Collection相關的類,不包含Map相

原创 [學習筆記-Java集合-8] Map - ConcurrentHashMap 源碼分析(二)

刪除元素 刪除元素跟添加元素一樣,都是先找到元素所在的桶,然後採用分段鎖的思想鎖住整個桶,再進行操作。 public V remove(Object key) { // 調用替換節點方法 return replaceNod

原创 [學習筆記-Java集合-7] Map - ConcurrentHashMap 源碼分析(一)

簡介 ConcurrentHashMap是HashMap的線程安全版本,內部也是使用(數組 + 鏈表 + 紅黑樹)的結構來存儲元素。 相比於同樣線程安全的HashTable來說,效率等各方面都有極大地提高。 用到鎖的簡介 這裏先簡單介紹一下

原创 [學習筆記-Java集合-6] WeakHashMap源碼分析

介紹 WeakHashMap是一種弱引用map,內部的key會存儲爲弱引用,當jvm gc的時候,如果這些key沒有強引用存在的話,會被gc回收掉,下一次當我們操作map的時候會把對應的Entry整個刪除掉,基於這種特性,WeakHashM