精致的缓存实现——simpleCache

import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public final class SimpleCache<K,V> {    
  private final Lock lock = new ReentrantLock();    
  private final int maxCapacity;    
  private final Map<K,V> eden;    
  private final Map<K,V> perm;

  public SimpleCache(int maxCapacity) {
        
    this.maxCapacity = maxCapacity;        
    this.eden = new ConcurrentHashMap<K,V>(maxCapacity);        
    this.perm= new WeakHashMap<K,V>(maxCapacity);

  }    
  public V get(K k) {        
    V v = this.eden.get(k);
     if (v == null) {
         lock.lock();
            try{                
                v = this.perm.get(k);            
            }finally{                
                lock.unlock();            
            }            
              if (v != null) {
                  this.eden.put(k, v);            
            }        
      }        
      return v;    
  }    
  public void put(K k, V v) {        
    if (this.eden.size() >= maxCapacity) {            
      lock.lock();            
        try{                
             this.perm.putAll(this.eden);            
        }finally{                
              lock.unlock();           
        }            
        this.eden.clear();        
    }        
    this.eden.put(k, v);    
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容