如何在java中使用ScheduledExecutorService以固定的时间间隔调用Callable实现?

时间:2011-02-24 09:07:44

标签: java

ScheduledExecutorService具有scheduleAtFixedRate(Runnable命令,long initialDelay,long period,TimeUnit单元)等方法,可以固定的时间间隔调用Runnable类。我希望我的Thread在执行后返回一些值。所以我实现了Callable接口。我找不到一个等效的方法来定期调用我的Callable类。有没有其他方法来实现这个?如果这不是Java提供的功能,那么该决定背后的理性是什么?请告诉我。感谢。

1 个答案:

答案 0 :(得分:12)

您无法安排Callable定期执行,因为不清楚如何从此类执行中返回结果。

如果您有自己的方法来返回结果(例如,将结果放入队列中),您可以将Callable包装到Runnable并实现您的方法:

final BlockingQueue<Result> q = new ArrayBlockingQueue<Result>();
final Callable<Result> action = ...;

s.scheduleAtFixedRate(new Runnable() {
    public void run() {
        q.put(action.call());
    }
}, ...);