该工具类使用场景:https://www.hellojava.com/article/236
import java.util.HashMap; import java.util.Map; /** * @author <a href="http://www.hellojava.com">Java菜鸟社区</a> */ public class ThreadLocalCache { private static ThreadLocal<Map<String, Object>> cache=new ThreadLocal<Map<String,Object>>(); /** * 从ThreadLocal里获取缓存的值 * @param key 要获取的数据的KEY * @return 要获取的值 */ public static Object getCache(String key) { Map<String, Object> 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<String, Object> vmap = new HashMap<String, Object>(); 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()
清空,防止有缓存数据。