一个简单实用的缓存实例

来源:互联网 发布:windows切换到mac 编辑:程序博客网 时间:2024/06/13 01:52
下面是一个简单缓存的实现摘自:http://www.oschina.net/code/snippet_55577_3887import java.util.Map;import java.util.WeakHashMap;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public final class SimpleCache<K,V> {private final Lock lock = new ReentrantLock();private final int maxCapacity;private final Map<K,V> eden;private final Map<K,V> perm;public SimpleCache(int maxCapacity) {this.maxCapacity = maxCapacity;this.eden = new ConcurrentHashMap<K,V>(maxCapacity);this.perm= new WeakHashMap<K,V>(maxCapacity);}public V get(K k) {V v = this.eden.get(k);if (v == null) {lock.lock();try{v = this.perm.get(k);}finally{lock.unlock();}if (v != null) {this.eden.put(k, v);}}return v;}public void put(K k, V v) {if (this.eden.size() >= maxCapacity) {lock.lock();try{this.perm.putAll(this.eden);}finally{lock.unlock();}this.eden.clear();}this.eden.put(k, v);}}

0 0
原创粉丝点击