gpt4 book ai didi

java - 用Future实现缓存过期

转载 作者:搜寻专家 更新时间:2023-11-01 03:42:04 26 4
gpt4 key购买 nike

我正在尝试扩展《实践中的并发》一书中给出的缓存实现(作者 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 方法来计算过期时间。

在主缓存类中即 Memorizer我将启动一个新线程,该线程将定期扫描条目并删除 isResultExpired 返回 true 的条目。

我只是想知道这个实现是否可行,或者我的代码中是否存在一些错误?

请注意,我还应该覆盖 get with Timeout .但是,为了简洁起见,我省略了这一点。

最佳答案

当然过期时间应该是不稳定的

关于java - 用Future实现缓存过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11964652/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com