import java.util.HashMap;
import java.util.Map;
/**
* @author Java菜鸟社区
*/
public class ThreadLocalCache {
private static ThreadLocal> cache=new ThreadLocal>();
/**
* 从ThreadLocal里获取缓存的值
* @param key 要获取的数据的KEY
* @return 要获取的值
*/
public static Object getCache(String key) {
Map map = cache.get();
if(isCaheIsNull())
return null;
if(map.containsKey(key)){
return map.get(key);
}else {
return null;
}
}
/**
* 向ThreadLocal缓存值
* @param key 要缓存的KEY
* @param value 要缓存的VALUE
*/
public static void set(String key,Object value)
{
if(!isCaheIsNull()){
cache.get().put(key, value);
}
else{
Map vmap = new HashMap();
vmap.put(key, value);
cache.set(vmap);
}
}
/**
* 根据KEY移除缓存里的数据
* @param key
*/
public static void removeByKey(String key){
if(isCaheIsNull())
return;
else
cache.get().remove(key);
}
/**
* 移除当前线程缓存
* 用于释放当前线程threadlocal资源
*/
public static void remove(){
cache.remove();
}
private static boolean isCaheIsNull(){
return cache.get()==null;
}
}
我们使用的时候直接在当前线程任意方法里进行储存ThreadLocalCache.set(CacheKeys.CACHE_OUT_TRADE_NO, out_trade_no);
再在当前线程里的任意方法里取值Object out_trade_no_obj = ThreadLocalCache.get(CacheKeys.CACHE_OUT_TRADE_NO);
if(out_trade_no_obj != null){
String out_trade_no = out_trade_no_obj.toSting()
}
在最后的时候需要进行ThreadLocalCache.remove()
清空,防止有缓存数据。