現在キャッシュを実装中です。私は以下のような基本的な実装を完了しました。私がしたいのは、特定の条件を満たすエントリを削除するスレッドを実行することです。リスト内のいくつかの要素を定期的にクリーンアップするバックグラウンドスレッドを実行するにはどうすればよいですか?
class Cache {
int timeLimit = 10; //how long each entry needs to be kept after accessed(marked)
int maxEntries = 10; //maximum number of Entries
HashSet<String> set = new HashSet<String>();
public void add(Entry t){
....
}
public Entry access(String key){
//mark Entry that it has been used
//Since it has been marked, background thread should remove this entry after timeLimit seconds.
return set.get(key);
}
....
}
私の質問は、スレッドがセット内のエントリの周りに行くとmarked && (last access time - now)>timeLimit
されているものを削除するように、私は、バックグラウンドスレッドを実装する方法、ありますか?
編集
上記はちょうど私が同期文を書いていないことを、コードのバージョンを簡略化されています。
「キャッシュ」はスレッドセーフではありません。複数のスレッドからアクセスしたい場合は、まずそのスレッドで作業してください。 –
代わりに 'add'メソッドからクリーンアップを呼び出すと、余分なスレッドは必要ありません。それがあなたのためのオプションであるかどうかは、パフォーマンス要件に依存します。 –
ConcurrentHashMap –