0

我的 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());
    }
  }

  ...
}
4

1 回答 1

1

如果您在代码中对其进行了更改,则可能是编译或部署问题。

尝试添加 JOptionPane.ShowMessageDialog("v1"); 看看 jboss 是否真的在使用你的新代码。

于 2013-01-09T20:37:53.547 回答