java – 使用Future实现缓存过期
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 使用Future实现缓存过期,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1305字,纯文字阅读大概需要2分钟。
内容图文
我正在尝试扩展在Concurrency in Practice(Brian Goetz)一书中给出的缓存实现.
我想扩展缓存,以便如果在10秒内没有访问任何条目,那么它应该到期.即从缓存中删除.
为此,我将Future和FutureTask扩展如下
package examples.cache;
import java.util.concurrent.Future;
public interface FutureWithExpire<V> extends Future<V> {
public boolean isResultExpired();
}
和
package examples.cache;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class FutureTaskWithExpire<V> extends FutureTask<V> implements FutureWithExpire<V>{
private final static long validPeriod = 10 * 1000;
private long expirationTime;
public FutureTaskWithExpire(Callable<V> callable) {
super(callable);
}
@Override
public V get() throws InterruptedException,ExecutionException{
V v = super.get();
expirationTime = System.currentTimeMillis() + validPeriod;
return v;
}
public boolean isResultExpired(){
if(isDone()){
if(expirationTime < System.currentTimeMillis()){
return true;
}
}
return false;
}
}
如上所示,我重写了get方法来计算到期时间.
在主缓存Class即Memorizer中,我将启动一个新线程,它将定期扫描条目并删除isResultExpired返回true的条目.
我只是想知道这个实现是否有效或我的代码中是否有一些错误?
注意我也应该覆盖get with Timeout.但是,为了保持简洁,我省略了.
解决方法:
而Ofcourse expirationTime应该是易变的
内容总结
以上是互联网集市为您收集整理的java – 使用Future实现缓存过期全部内容,希望文章能够帮你解决java – 使用Future实现缓存过期所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。