【发布时间】:2012-11-26 01:45:13
【问题描述】:
我有一个Callable<String>。我想通过ScheduledExecutorService.scheduleAtFixedRate() 定期运行它,并获取我的可调用对象上的.call() 调用返回的所有字符串的列表。由于scheduleAtFixedRate 不需要Callable(仅Runnables),我需要推出一个自定义Runnable 来包装我的Callable,类似于以下内容:
final Callable<String> myCallable = ....;
final ConcurrentLinkedQueue<String> results
= new ConcurrentLinkedQueue<String>();
Runnable r = new Runnable() {
@Override public void run() {
try {
results.add(myCallable.call());
} catch (Exception e) {
results.add(null); // Assuming I want to know that an invocation failed
}
}
};
ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(r, 0, 1, TimeUnit.SECONDS);
当然,我想避免推出我自己的自定义东西(尤其是在多线程代码中),所以我想知道有一个 JDK 类可以进行这种聚合吗?
【问题讨论】:
-
不,jdk 中没有现有实用程序可以为您将 Callable 结果放入集合中。
-
我就是这么想的。谢谢。