带锁的线程安全的LRULinkedHashMap简单实现

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

public class LRULinkedHashMap 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 LRULinkedHashMap(int maxCapacity) {
		super(maxCapacity, DEFAULT_LOAD_FACTOR, true);
		this.maxCapacity = maxCapacity;
	}

	@Override
	protected boolean removeEldestEntry(java.util.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();
		}
	}

}

你可能感兴趣的:(Java)