Как использовать методы Guava ListenableFuture и Futures.chain () - PullRequest
3 голосов
/ 24 декабря 2011

У меня есть домашнее задание, которое требует от меня научиться пользоваться библиотекой параллелизма Guava.

В этом задании у меня есть несколько пулов потоков, каждый из которых контролируется отдельным объектом.

В каждом пуле есть несколько рабочих потоков, которые выполняют простые задачи (в основном эмулируя выполнение заданий с помощью Thread.sleep(long)), и все эти простые задачи хранятся в объекте-контейнере, который эмулирует доску сообщений.

Каждая простая задача имеетсписок зависимостей других задач, и он не может быть выполнен до тех пор, пока все эти задачи не будут выполнены.

Как извлечь выгоду из библиотеки Guava, используя ListenableFuture и Futures.chain()?

Я искал везде обширный пример кода в Интернете, но не нашел ничего, что я понимаю, как использовать.

Ответы [ 3 ]

4 голосов
/ 25 декабря 2011

Как упоминает Луи, я думаю, что Futures.allAsList и т. Д. Могут быть полезны для вас.Однако я думаю, что Futures.chain действительно кажется полезным и подходящим для ситуации, которую вы описываете.Поскольку это задание предназначено для того, чтобы бросить вам вызов, я не буду говорить больше, чем это: Futures.chain позволяет вам отправить задачу для выполнения по завершении другой задачи и возвращает новый ListenableFuture, представляющий результат та задача.Как это относится к тому, что вы пытаетесь сделать?

4 голосов
/ 25 декабря 2011

Возможно, вас заинтересует чтение презентационных слайдов на Guava util.concurrent , связанных на домашней странице Guava (слайд 11 и далее).Они действительно помогли мне кристаллизовать мое понимание ListenableFuture и почему это так полезно.

Я предполагаю, что цель вашего задания - понять, как работают Futures, и как упрощает Guava ListenableFuture и Futures.chain()их использование при координации нескольких задач.

Единственный открытый исходный код, который приходит на ум, который использует ListenableFuture, - это sitebricks-mail :

Хотя я не знаю, использует ли он Futures.chain().

2 голосов
/ 25 декабря 2011

Я не думаю, что Futures.chain () является ответом здесь, если основная проблема связана со списками зависимостей задач.Скорее всего это Futures.allAsList или Futures.successfulAsList, которые принимают несколько фьючерсов и возвращают будущее, которое возвращается только после того, как все входные фьючерсы были успешными или неудачными.

...