一个简单的测试类,如果在高并发下会有问题么
package com.test.cache;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class CacheManager {
private volatile static CacheManager cacheManager;//缓存类的实例
private long upDataTime;//最后一次更新的时间
private static Map<Object,Object> cacheMap = new ConcurrentHashMap<Object,Object>();//缓存容器
private boolean upDataStatus;//缓存状态,true为正在更新,false为更新完毕
private CacheManager(){
upDataTime = System.currentTimeMillis();
}
/**
* 初始化,保证单例
* @return
*/
public static CacheManager getInstance(){
if(cacheManager == null){
synchronized(CacheManager.class){
if(cacheManager == null){
cacheManager = new CacheManager();
}
}
}
return cacheManager;
}
/**
* 载入数据
*/
public void loadAllCache(){
upDataStatus = true;
/*****************************/ //模拟从数据库取数据,放入map
cacheMap.put("1", 1);
cacheMap.put("2", 2);
cacheMap.put("3", 3);
cacheMap.put("4", 4);
/*****************************/
upDataStatus = false;
}
/**
* 返回缓存
* @return
*/
public Map<Object,Object> getCache(){
long currentTime = System.currentTimeMillis();
boolean isTimeOut = isTimeOut(currentTime);
if(upDataStatus){
System.out.println("当前缓存正在更新,不可取值");
return null;
}
if(isTimeOut){
System.out.println("当前缓存已超时,正在重新获取");
this.upDataTime = System.currentTimeMillis();
this.reloadCache();//重新获取
}
return cacheMap;
}
/**
* 判断是否超时
* @param currentTime
* @return
*/
private boolean isTimeOut(long currentTime){
return (currentTime-this.upDataTime > 100000 ? true :false);
}
/**
* 重新载入缓存
*/
private void reloadCache(){
this.cacheMap.clear();
this.loadAllCache();
}
}