我有一项家庭作业,要求我学习如何使用Guava并发库。
在任务中,我有几个线程池,每个线程池由一个单独的对象控制。
每个池都有几个执行简单任务的工作线程(主要是使用Thread.sleep(long)
模拟执行操作),所有这些简单任务都存储在一个模拟留言板的容器对象中。
每个简单任务都有一个其他任务的依赖列表,在完成所有这些任务之前无法执行。
如何使用ListenableFuture
和Futures.chain()
从番石榴库中受益?
我在网上搜索了一些广泛的示例代码,但没有找到任何我理解如何使用的代码。
答案 0 :(得分:4)
正如路易斯所提到的,我认为Futures.allAsList
等可能对你有用。但是,我认为Futures.chain
确实对您描述的情况有用且适用。由于这是一个旨在挑战你的任务,我不会多说这个:Futures.chain
允许你在完成另一个任务时提交任务执行,并返回一个新的{{1}表示那个任务的结果。这如何适用于你想要做的事情?
答案 1 :(得分:4)
您可能有兴趣阅读Guava主页(幻灯片11及以后)链接的presentation slides on Guava util.concurrent。他们真的帮助我明确了解ListenableFuture
及其为何如此有用。
我的猜测是,你的任务目标是了解Futures如何运作,以及Guava的ListenableFuture
和Futures.chain()
如何在协调多项任务时简化其使用。
使用ListenableFuture的唯一开源代码是sitebricks-mail:
我不知道它是否使用Futures.chain()
。
答案 2 :(得分:2)
如果主要问题是处理任务依赖列表,我认为Futures.chain()不是这里的答案。更有可能的是Futures.allAsList或Futures.successfulAsList,它们接受多个期货,并返回仅在所有输入期货成功或失败后才返回的未来。