0

私のプログラムにはメモリ内キャッシュ (キャッシュ クラス) があり、これは同期されたマップを使用するシングルトン クラスとして実装されています。これまで、タイムアウトは 4 時間に設定されていて、正常に機能していました。4 分に変更しようとすると、isTimedOut の動作がおかしくなり、false が返されます (アクセス時間が 4 分より古い場合でも)。デバッグ時に、タイムアウトとしてまだ 4 時間を使用していることがわかりました。しかし、sysout を isTimedOut メソッド (たとえば 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 に答える