zoukankan      html  css  js  c++  java
  • java map缓存

    /**
     * 缓存池
     * @author xiaoquan
     * @create 2015年3月13日 上午10:32:13
     * @see
     */
    public class CachePool {
        private static CachePool instance;//缓存池唯一实例
        private static Map<String,Object> cacheItems;//缓存Map
         
        private CachePool(){
            cacheItems = new HashMap<String,Object>();
        }
        /**
         * 得到唯一实例
         * @return
         */
        public synchronized static CachePool getInstance(){
            if(instance == null){
                instance = new CachePool();
            }
            return instance;
        }
        /**
         * 清除所有Item缓存
         */
        public synchronized void clearAllItems(){
            cacheItems.clear();
        }
        /**
         * 获取缓存实体
         * @param name
         * @return
         */
        public synchronized Object getCacheItem(String name){
            if(!cacheItems.containsKey(name)){
                return null;
            }
            CacheItem cacheItem = (CacheItem) cacheItems.get(name);
            if(cacheItem.isExpired()){
                return null;
            }
            return cacheItem.getEntity();
        }
        /**
         * 存放缓存信息
         * @param name
         * @param obj
         * @param expires
         */
        public synchronized void putCacheItem(String name,Object obj,long expires){
            if(!cacheItems.containsKey(name)){
                cacheItems.put(name, new CacheItem(obj, expires));
            }
            CacheItem cacheItem = (CacheItem) cacheItems.get(name);
            cacheItem.setCreateTime(new Date());
            cacheItem.setEntity(obj);
            cacheItem.setExpireTime(expires);
        }
        public synchronized void putCacheItem(String name,Object obj){
            putCacheItem(name,obj,-1);
        }
         
        /**
         * 移除缓存数据
         * @param name
         */
        public synchronized void removeCacheItem(String name){
            if(!cacheItems.containsKey(name)){
                return;
            }
            cacheItems.remove(name);
        }
         
        /**
         * 获取缓存数据的数量
         * @return
         */
        public int getSize(){
            return cacheItems.size();
        }
    }
     
     
    public class CacheItem {
        private Date createTime = new Date();//创建缓存的时间
        private long expireTime = 1;//缓存期满的时间
        private Object entity;//缓存的实体
         
        public CacheItem(Object obj,long expires){
            this.entity = obj;
            this.expireTime = expires;
        }
         
        public boolean isExpired(){
            return (expireTime != -1 && new Date().getTime()-createTime.getTime() > expireTime);
        }
            /**
             * 省略getter、setter方法
             */
    }

     原文:  http://www.cnblogs.com/quanenmin/p/4335278.html

     
  • 相关阅读:
    如何打造“万人同屏”高并发实时互动小程序
    当小程序遇见物联网IoT,几行代码搞定智能插座控制
    数据存储(1):从数据存储看人类文明-数据存储器发展历程
    JPEG/Exif/TIFF格式解读(1):JEPG图片压缩与存储原理分析
    从中国农民与美国农民比对漫谈工业革命与工程化—反思996
    扯扯Java中的锁
    强化学习 5 —— SARSA 和 Q-Learning算法代码实现
    强化学习 4 —— 时序差分法(TD)解决无模型预测与控制问题
    强化学习 3—— 使用蒙特卡洛采样法(MC)解决无模型预测与控制问题
    强化学习 2—— 用动态规划求解 MDP (Policy Iteration and Value Iteration)
  • 原文地址:https://www.cnblogs.com/liangbo-/p/5169979.html
Copyright © 2011-2022 走看看