博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HashMap实现缓存
阅读量:4677 次
发布时间:2019-06-09

本文共 3357 字,大约阅读时间需要 11 分钟。

package com.cache;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;public class MapCacheManager {    private final static Log log = LogFactory.getLog(MapCacheManager.class);    private volatile long updateTime = 0L;// 更新缓存时记录的时间    private volatile boolean updateFlag = true;// 正在更新时的阀门,为false时表示当前没有更新缓存,为true时表示当前正在更新缓存    private volatile static MapCacheManager mapCacheObject;// 缓存实例对象    private static Map
cacheMap = new ConcurrentHashMap
();// 缓存容器 private MapCacheManager() { this.LoadCache();// 加载缓存 updateTime = System.currentTimeMillis();// 缓存更新时间 } /** * 采用单例模式获取缓存对象实例 * * @return */ public static MapCacheManager getInstance() { if (null == mapCacheObject) { synchronized (MapCacheManager.class) { if (null == mapCacheObject) { mapCacheObject = new MapCacheManager(); } } } return mapCacheObject; } /** * 装载缓存 */ private void LoadCache() { this.updateFlag = true;// 正在更新 /********** 数据处理,将数据放入cacheMap缓存中 **begin ******/ cacheMap.put("key1", "value1"); cacheMap.put("key2", "value2"); cacheMap.put("key3", "value3"); cacheMap.put("key4", "value4"); cacheMap.put("key5", "value5"); /********** 数据处理,将数据放入cacheMap缓存中 ***end *******/ this.updateFlag = false;// 更新已完成 } /** * 返回缓存对象 * * @return */ public Map
getMapCache() { long currentTime = System.currentTimeMillis(); if (this.updateFlag) {
// 前缓存正在更新 log.info("cache is Instance ....."); return null; } if (this.IsTimeOut(currentTime)) {
// 如果当前缓存正在更新或者缓存超出时限,需重新加载 synchronized (this) { this.ReLoadCache(); this.updateTime = currentTime; } } return this.cacheMap; } private boolean IsTimeOut(long currentTime) { return ((currentTime - this.updateTime) > 1000000);// 超过时限,超时 } /** * 获取缓存项大小 * @return */ private int getCacheSize() { return cacheMap.size(); } /** * 获取更新时间 * @return */ private long getUpdateTime() { return this.updateTime; } /** * 获取更新标志 * @return */ private boolean getUpdateFlag() { return this.updateFlag; } /** * 重新装载 */ private void ReLoadCache() { this.cacheMap.clear(); this.LoadCache(); }}

测试实例:

package com.cache;import java.util.Iterator;import java.util.Map;import java.util.Set;import java.util.concurrent.ConcurrentHashMap;public class CacheTest {    public static void main(String[] args) {                MapCacheManager cache = MapCacheManager.getInstance();        Map
cacheMap = new ConcurrentHashMap
(); cacheMap = cache.getMapCache(); Set
set = cacheMap.keySet(); Iterator
it = set.iterator(); while(it.hasNext()){ String key = it.next(); System.out.println(key+"="+cacheMap.get(key)); } }}

 

转载于:https://www.cnblogs.com/zxiong/p/5379101.html

你可能感兴趣的文章
播放器
查看>>
linux使用select实现精确定时器详解
查看>>
隐藏 iframe 技术——Ajax 时代一个重要的环节
查看>>
腾讯通启动报错please intall msxml5.0 or later!
查看>>
JQuery攻略(一) 基础知识——选择器 与 DOM
查看>>
字符串hash
查看>>
2017《面向对象程序设计》课程作业六
查看>>
404 Note Found 队-Beta6
查看>>
[转载]实际举例C#引用类型和值类型的区别
查看>>
狼人杀校园升级版:学霸大战学渣 Who is the king of examination!
查看>>
哈希长度扩展攻击(Hash Length Extension Attack)利用工具hexpand安装使用方法
查看>>
redis学习
查看>>
Shell编程之IF条件
查看>>
Python编程-绑定方法、软件开发
查看>>
解决jquery操作checkbox火狐下第二次无法勾选问题
查看>>
第二次作业
查看>>
Centos安装ffmpeg
查看>>
作业:老板现在给你任务,公司有haproxy配置文件,希望通过python程序可以对ha配置文件进行增删改...
查看>>
hdu 1698+poj 3468 (线段树 区间更新)
查看>>
支付业务接口功能(二)
查看>>