4

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

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

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

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

如何使用ListenableFuture和的 Guava 库受益Futures.chain()

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

4

3 回答 3

4

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

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

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

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

于 2011-12-25T00:10:38.633 回答
4

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

于 2011-12-24T23:36:25.323 回答
2

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

于 2011-12-24T21:13:55.117 回答