私のプログラムにはメモリ内キャッシュ (キャッシュ クラス) があり、これは同期されたマップを使用するシングルトン クラスとして実装されています。これまで、タイムアウトは 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());
}
}
...
}