Разница между Future и CompletionStage в CompletableFuture заключается в их функциях и возможностях.
Future — интерфейс, который служит результатом асинхронных вычислений. 5 Он не содержит методов для объединения вычислений или обработки возможных ошибок. 5 Некоторые методы интерфейса Future: можно дождаться результата будущего с или без таймаута, запросить статус будущего и т. д.. 1
CompletionStage — интерфейс, который определяет контракт для шага асинхронных вычислений, который можно комбинировать с другими шагами. 5 CompletionStage предлагает множество методов для упрощения работы с ответами, вычисленными в разных потоках и этапах. 2 Некоторые из наиболее распространённых методов интерфейса: thenApply() (аналогичная функции map() из потоков) и thenAccept() (аналогичная функции foreach). 2
Таким образом, Future фокусируется на результате вычислений, а CompletionStage — на процессе работы с ответами и этапах выполнения задач.
Класс CompletableFuture одновременно реализует интерфейсы Future и CompletionStage, что позволяет ему одновременно представлять этап многоэтапных вычислений и их результат. 4