我的prog中有一个内存缓存(类Cache),它作为单例类实现,后者又使用同步映射。直到现在,超时设置为4小时,并且工作正常。在尝试将其更改为4分钟时,isTimedOut表现得非常奇怪并且返回false(即使在访问时间超过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());
}
}
...
}
答案 0 :(得分:1)
如果您在代码中更改了它,则可能是编译或部署问题。
尝试添加JOptionPane.ShowMessageDialog(“v1”);看看jboss是否正在使用你的新代码。