使用番石榴可以使用期货?

时间:2012-09-03 16:42:07

标签: java guava future

我最近一直在与Google Guava和ListenableFutures进行广泛的合作,而我一直在寻找的东西是一种为未来完成提供无序流媒体处理程序的方法。我想象的是一个可以在 next()上阻止的迭代,直到另一个未来返回。

在我创建自己的努力之前,是否已经存在?

如果没有,我的想法是利用ListenableFuture的回调功能将结果推送到BlockingQueue。目标是在返回后立即处理返回值。 Futures.successfulAsList()很棒,但在返回之前等待所有值,而不是让我安排其他有用的工作。

2 个答案:

答案 0 :(得分:7)

您可以使用java.util.concurrent.CompletionService。如果方法take没有抛出Iterator.next(),它的方法InterruptedException可以很容易地包装到{{1}}。

答案 1 :(得分:1)

认为你可以使用the same trick I've looked at with .NET's Task<T>

  • 创建新的List<SettableFuture<T>>值 - 与输入期货相同的数字
  • 为“到目前为止完成了多少期货”保留一个柜台
  • 对于每个输入期货,添加一个监听器,以便在将来完成时,递增计数器并为列表中的相应项设置该值(或错误)
  • 将列表返回给来电者

现在是一个与输入序列对应的期货序列,但是按输入完成的顺序排列。然后调用者可以遍历列表,等待每个列表依次完成。