我目前正在考虑使用Akka(Java API /库)来完成创建多个Future
的任务并将它们放入BlockingQueue
。现在可能是由Callables处理的某些任务在调用线程中运行得快/快,而不是创建新线程或等待新线程变为可用。我认为Akka正是这样做的,例如,如果我正在运行:
Future<String> f1 = future(new Callable<String>() {
public String call() {
return "Hello" + "World";
}
});
它可能会在调用future(Callable)的当前线程中执行,或者我错了?也许我错了,因为我没有得到调度员如何决定是否创建新线程。
现在我只是使用一个使用其他线程的ExecutorService,但由于某些任务真的非常快,所以当前的线程也可以处理它们。但我使用BlockingQueue<Future<Float>>
这就是为什么我有时不能使用Future
而有时不使用{{1}}。
最好的问候,
约翰内斯
答案 0 :(得分:2)
它总是使用来自提供的调度程序的线程,如果没有指定任何人,则使用全局默认值。要使用相同的线程,您需要传入CallingThreadDispatcher,但它始终是同步的。除了程序员之外,任何人都无法决定计算是否便宜。