工具类:基于ThreadLocal的一个线程级别的全局缓存ThreadLocalCache

import java.util.HashMap; import java.util.Map; /**  * @author <a href="http://www.hellojava.com">Java菜鸟社区</a>  *...

该工具类使用场景: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()

清空,防止有缓存数据。



  • 发表于 2017-11-07 14:30
  • 阅读 ( 3423 )
  • 分类:Java基础

条评论

请先 登录 后评论
不写代码的码农
三叔

422 篇文章

作家榜 »

  1. 小编 文章
返回顶部
部分文章转自于网络,若有侵权请联系我们删除