package com.william.job;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class CacheMgr {
private static Map cacheMap = new HashMap();
private static Map cacheConfMap = new HashMap();
private CacheMgr() {
}
private static CacheMgr cm = null;
public static CacheMgr getInstance() {
if (cm == null) {
cm = new CacheMgr();
Thread t = new ClearCache();
t.start();
}
return cm;
}
/**
* 增加缓存
*
* @param key
* @param value
* @param ccm
* 缓存对象
* @return
*/
public boolean addCache(Object key, Object value, CacheConfModel ccm) {
boolean flag = false;
cacheMap.put(key, value);
cacheConfMap.put(key, ccm);
System.out.println("now addcache==" + cacheMap.size());
return true;
}
/**
* 重载了增加缓存方法,
* @param key
* @param value
* @param beginTime
* @param durableTime -----分钟
* @param isForever
* @return
*/
public boolean addCache(Object key, Object value, long beginTime,int durableTime,boolean isForever) {
cacheMap.put(key, value);
CacheConfModel ccm = new CacheConfModel();
ccm.setBeginTime(beginTime);
ccm.setDurableTime(durableTime);
ccm.setForever(isForever);
cacheConfMap.put(key, ccm);
System.out.println("now addcache==" + cacheMap.size());
return true;
}
/**
* 删除缓存
*
* @param key
* @return
*/
public boolean removeCache(Object key) {
cacheMap.remove(key);
cacheConfMap.remove(key);
System.out.println("now removeCache==" + cacheMap.size());
return true;
}
/**
* 获取缓存
* @param key
* @return
*/
public Object getData(Object key)
{
return cacheMap.get(key);
}
/**
* 清除缓存的类
*
* @author wanglj 继承Thread线程类
*/
private static class ClearCache extends Thread {
public void run() {
while (true) {
Set tempSet = new HashSet();
Set set = cacheConfMap.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
CacheConfModel ccm = (CacheConfModel) cacheConfMap.get(key);
// 比较是否需要清除
if (!ccm.isForever()) {
if ((new Date().getTime() - ccm.getBeginTime()) >= ccm
.getDurableTime() * 60 * 1000) {
// 可以清除,先记录下来
tempSet.add(key);
}
}
}
// 真正清除
Iterator tempIt = tempSet.iterator();
while (tempIt.hasNext()) {
Object key = tempIt.next();
cacheMap.remove(key);
cacheConfMap.remove(key);
}
System.out.println("now thread================>"
+ cacheMap.size());
// 休息
try {
Thread.sleep(60 * 1000L);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
package com.william.job;
public class CacheConfModel implements java.io.Serializable {
private long beginTime;
private boolean isForever = false;
private int durableTime;
public long getBeginTime() {
return beginTime;
}
public void setBeginTime(long beginTime) {
this.beginTime = beginTime;
}
public boolean isForever() {
return isForever;
}
public void setForever(boolean isForever) {
this.isForever = isForever;
}
public int getDurableTime() {
return durableTime;
}
public void setDurableTime(int durableTime) {
this.durableTime = durableTime;
}
}