Bis*_*128 5 java concurrency date map
我正在尝试创建一个Map<String, Date>可以保存值,直到日期值> 1天.
是这样做的最佳方法是使用a ConcurrentHashMap然后创建一个每分钟左右迭代一次映射的线程,然后删除超过1天的值,或者,有更好的方法来执行此操作吗?
为了澄清,收到的日期消息不是当前时间,可以是之前的时间
谢谢
编辑:好的,所以我编辑了以下所有内容以使用,Optional<Date>因为Guava的缓存不喜欢Callable或CacheLoader返回,null并且您希望将其用作Map与密钥关联的值可能不存在的位置.
使用Guava的缓存
Cache<Key, Graph> graphs = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.DAYS)
.build();
Run Code Online (Sandbox Code Playgroud)
加载缓存将是......
LoadingCache<String, Optional<Date>> graphs = CacheBuilder.newBuilder()
.expireAfterWrite(1, TimeUnit.DAYS)
.build(
new CacheLoader<String, Optional<Date>>() {
public Optional<Date>load(Stringkey) throws AnyException {
return Optional.absent();
}
});
Run Code Online (Sandbox Code Playgroud)
好的,所以我认为如果Date可能已经过去你想要的是将上面的内容包装成Cache一个ForwardingCache.SimpleForwardingCache.然后get,null如果Date值早于一天,则重载该方法以返回.
Cache<String, Optional<Date>> cache = new SimpleForwardingCache<>(grapsh){
public Optional<Date>get(String key, Callable<Optional<Date>> valueLoader){
Optional<Date> result = delegate().get(key, valueLoader);
if (!result.isPresent() || olderThanADay(result.get()))
return Optional.absent();
else
return result;
}
// since you don't really need a valueLoader you might want to add this.
// this is in place of the LoadingCache, if use LoadingCache use
// ForwardingLoadingCache
public Date get(String key){
return get(key,
new Callable<Optional<Date>>(){
public Date call(){return Optional.absent();}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
648 次 |
| 最近记录: |