자물쇠 가 달 린 라인 안전 한 LRULinked HashMap 간단하게 실현

1037 단어 Java
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();
		}
	}

}

좋은 웹페이지 즐겨찾기