Java守护程序线程没有获取更新的变量

时间:2013-01-09 20:30:09

标签: java caching jboss

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

  ...
}

1 个答案:

答案 0 :(得分:1)

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

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