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

org.wowtools.common.utils.WeakCache Maven / Gradle / Ivy

The newest version!
package org.wowtools.common.utils;

import java.util.WeakHashMap;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

/**
 * 弱引用缓存类,
 * 当某种数据需要被重复使用,此数据加载需要一定时间,但全部加载到内存中又太占资源时,可以考虑用此工具类。
 * 此类缓存了数据键值对在内存中,当缓存中没有对应的key、或key对应的值为null时,通过loadByKey从外部加载数据;
 * 缓存在GC时由JDK自行判断是否回收,也可调用clear方法手动清理
 * @author liuyu
 * @date 2016年7月27日
 * @param 
 * @param 
 */
public abstract class WeakCache {
	
	private final WeakHashMap cacheMap;
	
	private final ReadWriteLock lock = new ReentrantReadWriteLock();
	
	public WeakCache(){
		cacheMap = new WeakHashMap<>();
	}
	
	public WeakCache(int initCacheMapSize){
		cacheMap = new WeakHashMap<>(initCacheMapSize);
	}
	
	/**
	 * 当cache中没有key对应的值时,通过此方法从外部加载
	 * @param key
	 * @return
	 */
	protected abstract V loadByKey(K key);
	
	public V get(K key){
		lock.readLock().lock();
		V res = cacheMap.get(key);
		lock.readLock().unlock();
		if(null==res){
			res = loadByKey(key);
			final V v = res;
			lock.writeLock().lock();
			cacheMap.put(key, v);
			lock.writeLock().unlock();

		}
		return res;
	}
	
	public void clear(){
		lock.writeLock().lock();
		cacheMap.clear();
		lock.writeLock().unlock();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy