框架基础(1)使用LinkedHashMap实现LRU缓存

来源:互联网 发布:手机淘宝秒杀软件下载 编辑:程序博客网 时间:2024/06/06 11:01
public class LRUCache<K, V> extends LinkedHashMap<K, V> {private static final long serialVersionUID = 3755413498196039249L;private static final float DEFAULT_LOAD_FACTOR = 0.75f;private static final int DEFAULT_MAX_CAPACITY = 1000;private volatile int maxCapacity;private final Lock lock = new ReentrantLock();    public LRUCache() {    this(DEFAULT_MAX_CAPACITY);    }    public LRUCache(int maxCapacity) {        super(16, DEFAULT_LOAD_FACTOR, true);        this.maxCapacity = maxCapacity;    }    @Override    protected boolean removeEldestEntry(java.util.Map.Entry<K, V> eldest) {        return size() > maxCapacity;    }    @Override    public boolean containsKey(Object key) {        try {            lock.lock();            return super.containsKey(key);        } finally {            lock.unlock();        }    }    @Override    public V get(Object key) {        try {            lock.lock();            return super.get(key);        } finally {            lock.unlock();        }    }    @Override    public V put(K key, V value) {        try {            lock.lock();            return super.put(key, value);        } finally {            lock.unlock();        }    }    @Override    public V remove(Object key) {        try {            lock.lock();            return super.remove(key);        } finally {            lock.unlock();        }    }    @Override    public int size() {        try {            lock.lock();            return super.size();        } finally {            lock.unlock();        }    }    @Override    public void clear() {        try {            lock.lock();            super.clear();        } finally {            lock.unlock();        }    }public int getMaxCapacity() {return maxCapacity;}public void setMaxCapacity(int maxCapacity) {this.maxCapacity = maxCapacity;}}

0 0