Concurrency 如何使用Guava ListenableFuture和Futures.chain()方法

Concurrency 如何使用Guava ListenableFuture和Futures.chain()方法,concurrency,guava,future,Concurrency,Guava,Future,我有一个家庭作业,要求我学习如何使用Guava并发库 在这个任务中,我有几个线程池,每个线程池都由一个单独的对象控制 每个池都有几个执行简单任务的工作线程(主要是通过使用Thread.sleep(long))模拟执行任务),所有这些简单任务都存储在模拟留言板的容器对象中 每个简单任务都有一个其他任务的依赖项列表,在所有这些任务完成之前,无法执行该任务 使用ListenableFuture和Futures.chain(),我如何从Guava库中获益 我在网上到处搜索了一些广泛的示例代码,但没有找到

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

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

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

每个简单任务都有一个其他任务的依赖项列表,在所有这些任务完成之前,无法执行该任务

使用
ListenableFuture
Futures.chain()
,我如何从Guava库中获益


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

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

正如Louis提到的,我认为
Futures.allAsList
等可能对您有用。然而,我认为
Futures.chain
确实对您描述的情况有用且合适。由于这是一项旨在向您提出挑战的任务,因此我不打算多说:
Futures.chain
允许您在完成另一项任务后提交一项任务以供执行,并返回一个新的
ListenableFuture
,表示该任务的结果。这对你正在做的事情有何影响?

你可能有兴趣阅读番石榴主页上的链接(幻灯片11及以后)。它们确实帮助我明确了我对
ListenableFuture
的理解,以及为什么它如此有用

我猜你的作业的目的是了解未来是如何工作的,以及番石榴的
ListenableFuture
Futures.chain()
如何在协调多个任务时简化它们的使用

我想到的唯一使用ListenableFuture的开放源代码是:


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

你读过这篇文章吗?他们是一个很好的起点。谁在布置芭乐家庭作业?另外,我应该开始在Guava wiki上添加这些工具的说明。@LouisWasserman我的大学决定挑战我们。实际上是为了额外的信用,但我需要额外的积分。这对我的成绩有好处。无论如何,我已经阅读并理解了ListenableFuture API,但我不理解的是Futures.chain()的用法,以及它如何在所描述的场景中帮助我看到番石榴被用于这样一个额外的学分分配,这听起来很有用。它似乎强调了一些我猜是
ListenableFuture
及其相关实用程序的主要动机。从Guava版本14(我目前使用的版本)起,
chain
不再是库的一部分。它已经被
Futures.transform
取代,如果没有帮助,顺便说一句,请在您找到答案时告诉我,以便我可以尝试改进该页面。我们还应该提到,从Guava 11开始,我认为Futures.chain已被弃用,而Futures.transform(ListenableFuture,AsyncFunction)是首选?(AsyncFunction基本上与函数相同。)不幸的是,“Guava util.concurrent上的演示幻灯片”链接不可用:(事实上,它们似乎已被删除,因为它们已经过时:我将使用此链接: