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