zoukankan      html  css  js  c++  java
  • ThreadLocal工具类做缓存(线程隔离思想)

    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(isCacheIsNull())
                return null;
            if(map.containsKey(key)){
                return map.get(key);
            }
            return null;
        }
    
        /**
         * 向ThreadLocal缓存值
         * @param key 要缓存的KEY
         * @param value 要缓存的VALUE
         */
        public static void set(String key,Object value) {
            if(!isCacheIsNull()){
                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(!isCacheIsNull()){
                cache.get().remove(key);
            }
        }
    
        /**
         * 移除当前线程缓存
         * 用于释放当前线程threadlocal资源
         */
        public static void remove(){
            cache.remove();
        }
    
        private static boolean isCacheIsNull(){
            return  cache.get()==null;
        }
    
    
        public static String cacheToString() {
            return isCacheIsNull() ? null : cache.get().toString();
        }
    }

    工具类

    当在线程池中使用时,使用后要remove();

  • 相关阅读:
    Git/GitHub使用技巧
    《暗时间》第一遍读书心得整理
    学习方法摘要总结
    Py爬虫项目
    2018年6月12日
    狐狸坑蛋糕
    Codeforces 371C Hanburgers
    【别忘咯】 关于运算优先级
    【noip 2009】 乌龟棋 记忆化搜索&动规
    【Openjudge】 算24
  • 原文地址:https://www.cnblogs.com/zchok/p/11868559.html
Copyright © 2011-2022 走看看