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

来源:互联网 发布:java开发客户端软件 编辑:程序博客网 时间:2024/05/16 01:42

上面在讲到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(); //锁定   }
0 0