永发信息网

使用java实现以个简单的缓存机制?

答案:1  悬赏:0  手机版
解决时间 2021-03-19 15:13
使用java实现以个简单的缓存机制?
最佳答案
你这个分数太少了吧,程序到是有,不过给你有点可惜
CacheMgr.java
import java.util.*;

import cn.javass.framework.cache.vo.CacheConfModel;
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;
}

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;
}

public boolean removeCache(Object key){
cacheMap.remove(key);
cacheConfMap.remove(key);

System.out.println("now removeCache=="+cacheMap.size());

return true;
}

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();
}
}
}
}
}
CacheConfModel.java

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;
}
}
顺便说一句,缓存的管理不是靠时间久来计算的,是靠最大不活动间隔计算的,你的设计思想有问题
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
第四套1元2元2角5角百联号的人民币全是新的能
hold不住,从英雄联盟转到王者荣耀要适应哪些
在工地工作的上什么手机软件能借到钱?试了很
方正县公路管理站大沟道班在哪里啊,我有事要
太阳镜s815p多少钱46口23一125cE7是什么意思
北京工业大学旁边有啥学校
笑的英语单词是什么
电脑版虾米音乐 怎么传歌 !! 到U盘
别克凯越1.6排量的车钢体放水螺丝在哪里?
老西关牛杂砂锅土豆粉馆(抱石大道店)怎么去啊
怎样把50元现金存到银行卡里?
受微信限制gif图片太大怎么办
已知三个数2,4,8,请再添一个数,使它们构
诺基亚5233怎么样能用无线网
平菇有毒吗 平菇和什么吃有毒吗
推荐资讯
小辣椒在什么地方啊,我要过去处理事情
简单快乐是什么意思
有没有国道省道~~~标志~~~的图? 还有
我是小音乐家是哪国的歌曲
保兴不锈钢装饰工程部怎么去啊,有知道地址的
轨道交通运营管理专业和护理哪个好?
隆鼻后多久可以拿掉胶布
螺旋藻长期食用突然停掉,会有副作用吗?
最近在练习岸部真明的几首特殊调弦的曲子,6
mol 下属有货代公司吗
270括号=5
长沙珍爱网上面可以找到真爱吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?