All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ajaxjs.util.cache.LRUCache Maven / Gradle / Ivy

There is a newer version: 1.2.6
Show newest version
package com.ajaxjs.util.cache;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 带锁的线程安全的LRULinkedHashMap简单实现
 * 
 * @author https://blog.csdn.net/a921122/article/details/51992713
 *
 * @param 
 * @param 
 */
public class LRUCache extends LinkedHashMap {
	private static final long serialVersionUID = -952299094512767664L;

	private final int maxCapacity;

	private static final float DEFAULT_LOAD_FACTOR = 0.75f;

	private final Lock lock = new ReentrantLock();

	public LRUCache(int maxCapacity) {
		super(maxCapacity, DEFAULT_LOAD_FACTOR, true);
		this.maxCapacity = maxCapacity;
	}

	@Override
	protected boolean removeEldestEntry(Map.Entry eldest) {
		return size() > maxCapacity;
	}

	@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();
		}
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy