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

use*_*476 14 java

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

axt*_*avt 12

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

如果你有自己的方法来返回结果(例如,将结果放进一个队列中),你可以用CallableRunnable和实现的方法:

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

s.scheduleAtFixedRate(new Runnable() {
    public void run() {
        q.put(action.call());
    }
}, ...);
Run Code Online (Sandbox Code Playgroud)