Как CompletableFuture
, введенный в JDK 8, сравнивается с io.netty.util.concurrent.Future
, предоставленным Netty?
В документации Netty упоминается, что
JDK 8 добавляет CompletableFuture, который несколько перекрывает
io.netty.util.concurrent.Future
http://netty.io/wiki/using-as-a-generic-library.html
Вопросы, на которые я пытаюсь получить ответы:
- В чем их сходство и различие?
- Чем отличаются их рабочие характеристики? Какой из них лучше масштабируется?
Что касается сходства/различия, я смог придумать следующее:
Сходства: фундаментальное сходство заключается в том, что оба не блокируют по сравнению с Java Future. Оба класса имеют методы, доступные для добавления слушателя в будущее, анализа неудачи и успеха задачи и получения результатов от задачи.
Различия: CompletableFuture
, кажется, имеет гораздо более богатый интерфейс для таких вещей, как составление нескольких асинхронных действий и т. д. С другой стороны, Netty io.netty.util.concurrent.Future
позволяет добавлять несколько слушателей в одно и то же Future и, кроме того, позволяет слушателям удалить.
CompletableFuture.thenDoSomething()
несколько раз, что аналогично добавлению нескольких слушателей в других будущих фреймворках. - person Vladimir Korenev   schedule 07.12.2015CompletableFuture
(и любой другой класс, реализующийCompletionStage
) имеет такие методы, какthenApply
иthenApplyAsync
, которые работают по-разному. Такие методы, какthenApply
, будут выполняться немедленно в том же потоке, в то время какthenApplyAsync
будет выполняться с использованиемExecutor
, который может быть реализован с помощью цикла обработки событий (хотя по умолчанию используется пул для перехвата работы). - person kag0   schedule 11.04.2017