hutool手写简单缓存
public class SimpleCache<K, V> implements Serializable{
private static final long serialVersionUID = 1L;
private final Map<K, V> cache = new WeakHashMap<>();
private final ReentrantReadWriteLock cacheLock = new ReentrantReadWriteLock();
private final ReadLock readLock = cacheLock.readLock();
private final WriteLock write = cacheLock.writeLock();
public V get(K key){
readLock.lock();
V value;
try {
value = cache.get(key);
} finally {
readLock.unlock();
}
return value;
}
public V get(K key, Funco<V> supplier){
V v = get(key);
if(null == v && null != supplier){
writeLock.lock();
try{
v = cache.get(key);
if(null == v) {
try {
v = supplier.call();
} catch (Exception e){
throw new RuntimeException(e);
}
cache.put(key, v);
}
} finally {
writeLock.unlock();
}
}
return v;
}
public V put(K key, V value){
writeLock.lock();
try {
cache.put(key, value);
} finally {
writeLock.unlock();
}
return value;
}
public V remove(K key) {
writeLock.lock();
try {
return cache.remove(key);
} finally {
writeLock.unlock();
}
}
public void clear() {
writeLock.lock();
try {
this.cache.clear();
} finally {
writeLock.unlock();
}
}
}
public interface Func0<R> {
R call() throws Exception;
}