guava cache 代碼分析3 get(key) -- 7

上面在講到Segment數組的時候,已經提過根據key的hash計算出在那一個Segment裏面。下面具體看下Segment是怎麼從緩存中取出的。

 V get(K key, int hash, CacheLoader<? super K, V> loader) {
      //當沒有數據時,就直接load再載入
      if(count == 0) return lockedGetOrLoad(key, hash, loader);

    }finally{

    }
 }

之前有提過ReferenceEntry,他裏面有個 ReferenceEntry next ,指向前一個。這就代表着他是個指針。3->2->1->null。先取出的是3 (先進後取)

  • 當沒有key時,載入取出
   V lockedGetOrLoad(K key, int hash, CacheLoader<? super K, V> loader) {
       ReferenceEntry<K, V> e; //這個是value
       ValueReference<K, V> valueReference = null;
       boolean createNewEntry = true;//是否要創建
       lock(); //鎖定

   }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章