/**伪代码实现一个lru缓存 关键 1、linkedhashmap 2、超时时间 value值要包装成一个 包含 过期时间的对象 3、*/
class BlockingLinkedHashmap<k, v> implemnts LinkedHashMap<k, v>{
private ReentrantLock lock;
private v get(k key){
try{
lock.lock();
return super.get(key);
}finally{
lock.unlock();
}
}
//下面省略好多getset 主要是加个lock
}
class ValueWrapper<v>{
private v value;
private long timeout;
private Date c;
public ValueWrapper(v value){
}
public ValueWrapper(v value, long tiemout){
this.value = value;
this.timeout = time;
this.updateTime = new Date();
}
public v getValue(){
if(timeout !=null ){
Date now = new Date();
updateTime = now;
if(now.getTime - updateTime > timeout){
return null;
}
}
return v;
}
}
class LruCache<k, v>{
private BlockingLinkedHashmap<k, v> map ;
init(){
map = new BlockingLinkedHashmap();
}
public void set(k key, v value, long timeout){
map.put(key, new ValueWrapper<v>(value, timeout));
}
public void set(k key, v value){
map.put(key, new ValueWrapper<v>(value));
}
public v get(k key){
ValueWrapper<v> valueWrapper;
valueWrapper = map.remove(key);
if(valueWrapper == null){
return null;
}else{
return valueWrapper.getValue();
}
}
}