问题: 我需要以固定速率(例如每 10 秒)调用一个 dao 方法,然后我需要检查结果是否有效(如果是退出),否则继续每 10 秒调用该方法,直到获得有效结果或定义超时(比如 2 分钟)结束。
方法: 我想将任务和调度程序逻辑分开,并以可以由具有类似需求的不同类使用的方式编写任务。
我能想到的一种方法是定义一个新的轮询器任务
public abstract class PollerTask<T> implements Runnable {
abstract public boolean isValid(T result);
abstract public T task();
private T result;
private volatile boolean complete;
public boolean isComplete() {
return complete;
}
public T getResult() {
return result;
}
@Override
final public void run() {
result = task();
if (complete = isValid(result)) {
//may be stop scheduler ??
}
}
}
Run Code Online (Sandbox Code Playgroud)
用户只需提供任务的实现和isValid;
然后我们可以定义一个单独的类,它采用池化频率和超时并创建一个计划执行器并提交此任务
public class PollerTaskExecutor {
private int …Run Code Online (Sandbox Code Playgroud) 我是Guava缓存的新手,在阅读文档https://code.google.com/p/guava-libraries/wiki/CachesExplained后我很困惑 .
使用缓存加载器和加载方法之间的区别是使用带有可调用get(K,Callable)的get方法加载密钥(如果缓存中不存在).
对我来说,它们都用于加载密钥的相同目的.无法从the doc doc中找到两者之间的差异.有人可以帮忙吗