2

我目前正在考虑使用 Akka(Java API/库)来完成创建多个Futures 并将它们放入BlockingQueue. 现在可能是由 Callables 处理的某些任务在调用线程中运行得更快/更快,而不是创建新线程或等待新线程可用。我认为 Akka 正是这样做的,例如,如果我正在运行:

Future<String> f1 = future(new Callable<String>() {
                  public String call() {
                      return "Hello" + "World";
                  }
              });

它可能在调用 future(Callable) 的当前线程中执行,还是我错了?也许我错了,因为我不明白调度程序将如何决定是否创建新线程。

现在我只是使用一个使用其他线程的 ExecutorService,但是由于某些任务真的非常快,它们也可以由当前线程处理。但我正在使用 aBlockingQueue<Future<Float>>这就是为什么我有时不能使用Futures 有时不能。

最好的问候,
约翰内斯

4

1 回答 1

2

它总是使用提供的调度程序中的一个线程,或者如果没有指定,则使用全局默认值。要使用同一个线程,您需要传入一个 CallingThreadDispatcher,但它始终是同步的。除了程序员之外,任何人都无法决定计算是否便宜。

于 2011-09-16T09:08:58.810 回答