【问题标题】:How to use the Guava ListenableFuture and the Futures.chain() methods如何使用 Guava ListenableFuture 和 Futures.chain() 方法
【发布时间】:2012-01-27 09:39:36
【问题描述】:

我有一个家庭作业,需要我学习如何使用 Guava 并发库。

在任务中,我有几个线程池,每个线程池都由一个单独的对象控制。

每个池都有几个执行简单任务的工作线程(主要是通过使用Thread.sleep(long) 模拟做事),所有这些简单任务都存储在一个模拟留言板的容器对象中。

每个简单的任务都有一个其他任务的依赖列表,在所有这些任务都完成之前它不能被执行。

如何使用 ListenableFutureFutures.chain() 从 Guava 库中受益?

我在网上到处搜索了一些广泛的示例代码,但没有找到任何我理解如何使用的东西。

【问题讨论】:

  • 你读过ListenableFuture JavaDocs吗?他们是一个很好的起点。
  • 谁在布置番石榴作业?另外,我应该开始在 Guava wiki 中添加对这些工具的解释。
  • @LouisWasserman 我的大学决定挑战我们。这实际上是为了加分,但我需要那些加分。对我的成绩有好处。无论如何,我已经阅读并理解了 ListenableFuture API,我不明白的是 Futures.chain() 的使用以及它如何在所描述的场景中帮助我
  • 很高兴看到 Guava 被用于这样的额外学分作业,而且听起来很有用。它似乎强调了我猜想是ListenableFuture 及其相关实用程序的主要动机。
  • 从 Guava 版本 14(我目前使用的版本)开始,chain 不再是库的一部分。已替换为Futures.transform

标签: concurrency guava future


【解决方案1】:

正如 Louis 提到的,我认为 Futures.allAsList 等可能对您有用。但是,我认为Futures.chain 确实 似乎有用且适合您描述的情况。由于这是一项旨在挑战您的任务,因此我不会多说:Futures.chain 允许您在完成另一个任务后提交任务以执行,它会返回一个新的 ListenableFuture 代表结果那个任务。这如何适用于您正在尝试做的事情?

【讨论】:

【解决方案2】:

您可能有兴趣阅读 Guava 主页上链接的 presentation slides on Guava util.concurrent(幻灯片 11 及以后)。他们真的帮助我明确了我对ListenableFuture 的理解以及它为什么如此有用。

我的猜测是,你的作业目标是了解 Futures 的工作原理,以及 Guava 的 ListenableFutureFutures.chain() 如何在协调多个任务时简化它们的使用。

唯一想到的使用ListenableFuture的开源代码是sitebricks-mail

不过,我不知道它是否使用Futures.chain()

【讨论】:

【解决方案3】:

如果主要问题是处理任务依赖列表,我认为 Futures.chain() 不是这里的答案。更有可能的是 Futures.allAsList 或 Futures.successfulAsList,它们接受多个期货,并返回一个仅在所有输入期货成功或失败后才返回的期货。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 2023-03-31
  • 1970-01-01
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
相关资源
最近更新 更多