2015-08-11 3 views
0

По Oracle documentation:invokeall() Wiht будущее Versus CompletableFuture

invokeAll(): выполняет поставленные задачи, возвращая список фьючерсов, имеющих свой статус и результаты, когда все полные. Future.isDone() верно для каждого элемента возвращаемого списка. Обратите внимание, что завершенная задача может завершиться либо нормально, либо путем исключения исключения. Результаты этого метода не определены, если данный сборник изменен во время выполнения этой операции.

CompletableFuture также реализует будущее со следующими политики:

  • С (в отличие от FutureTask) этот класс не имеет прямого контроля над вычислением, что приводит к его будет завершено, отмена трактуется как только другая форма исключительного завершения. Отмена метода имеет тот же эффект, что и completeExceptionally(new CancellationException()). Метод isCompletedExceptionally() может использоваться для определения того, завершен ли CompletableFuture каким-либо исключительным образом.

  • В случае исключительного завершения с CompletionException, методами get() и get(long, TimeUnit) бросить ExecutionException с той же самой причиной, как проведенные в соответствующем CompletionException. Чтобы упростить использование в большинстве контекстов, этот класс также определяет методы join() и getNow(T), которые вместо этого бросают CompletionException непосредственно в этих случаях.

Каковы различия между

  • invokeAll() с Future

  • CompletableFuture

Поскольку JDK 1.7 не поддерживает CompletableFuture, может ли тот же результат быть достигнут с invokeAll() с Future?

+0

Благодарим вас за отзыв. Исправил вопрос. –

+0

'CompletableFuture' просто предоставляет возможность асинхронно действовать на результат. «Будущее» - нет. –

+1

Теперь я проверил вопрос. Этот вопрос преобразует 1,7 кода в 1,8 совместимый код. Я ищу достижение 1.8 с 1.7 кодом, так как я не могу обновить JDK до 1.8 –

ответ

1

Конечно, вы можете, если написать немного кода:

  1. Copy/реализации (необходимые/связанные части из) CompletableFuture. Например, пример this implementation on grepcode.
  2. Расширить ExecutorService (что вы уже используете), а также расширить protected метод newTaskFor(), ответственный за инстанцировании Future сек от Runnable или Callable, создавая в нем new CompletableFuture().
Смежные вопросы