我的 prog 中有一个内存缓存(缓存类),它被实现为单例类,而单例类又使用同步映射。到目前为止,超时设置为 4 小时并且工作正常。在尝试将其更改为 4 分钟时,isTimedOut 的行为很奇怪并且返回错误(即使在访问时间超过 4 分钟之后)。在调试时,我发现它仍然使用 4 小时作为超时。但是,如果我在 isTimedOut 方法中放置一个 sysout(比如 sysout("")),那么该方法将获取新值 => 4 分钟!
任何建议/指针?
class Cache implements Runnable{
public static final long timeout=4*60*1000;//4 mins
static {
cache = new Cache();
Thread myThread= new Thread(cache );
myThread.setDaemon(true);
myThread.start();
}
private Map map = Collections.synchronizedMap(new HashMap());
public void add(CacheObj o){
cache.add(somestr, o);
}
public void run(){
if(cache.isTimedOut(){
//delete from cache
}
}
class CacheObj{
Date accessedTime;
boolean isTimedOut(){
Date timeOut = new Date(accessedTime.getTime() + Cache.timeout);
Date now = new Date();
return (now.getTime() > timeOut.getTime());
}
}
...
}