小编cod*_*der的帖子

预定执行器:以固定速率轮询结果,如果超时或结果有效则退出

问题: 我需要以固定速率(例如每 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)

java multithreading scheduledexecutorservice

5
推荐指数
1
解决办法
4321
查看次数

番石榴缓存:cacheloader vs get(k,callable)

我是Guava缓存的新手,在阅读文档https://code.google.com/p/guava-libraries/wiki/CachesExplained后我很困惑 .

使用缓存加载器和加载方法之间的区别是使用带有可调用get(K,Callable)的get方法加载密钥(如果缓存中不存在).

对我来说,它们都用于加载密钥的相同目的.无法从the doc doc中找到两者之间的差异.有人可以帮忙吗

java caching guava

5
推荐指数
1
解决办法
4022
查看次数