import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
/**
* @author chunyang.leng
* @date 2021-03-03 3:40 下午
*/
public class LRU<K, V> {
private LRUMap<K,V> lruMap;
private final Lock lock = new ReentrantLock();
public LRU(int limit) {
lruMap = new LRUMap<>(limit);
}
public void put(K k,V v){
try{
lock.lock();
lruMap.put(k,v);
}finally {
lock.unlock();
}
}
public V get(K k){
try{
lock.lock();
return lruMap.get(k);
}finally {
lock.unlock();
}
}
private class LRUMap<K, V> extends LinkedHashMap<K, V> {
//限制的长度
private int limit;
LRUMap(int limit) {
super(16, 0.75f, true);
this.limit = limit;
}
/**
* 如果map里面的元素个数大于了缓存最大容量,则删除链表的顶端元素
*/
@Override
public boolean removeEldestEntry(Map.Entry<K, V> entry) {
return size() > limit;
}
}
}
LRU(JAVA)
最新推荐文章于 2024-09-10 15:38:40 发布