Java CompletableFuture get Метод - PullRequest
       32

Java CompletableFuture get Метод

0 голосов
/ 11 октября 2018

У меня возникли проблемы с пониманием CompletableFuture.Я не понимаю метод get ().Пожалуйста, исправьте меня, если я ошибаюсь, но там написано: «Если нужно, дождитесь завершения этого будущего, а затем вернет его результат».Так что, если я не возвращаю результат, мне не нужно вызывать метод get?Пожалуйста, смотрите ниже.Даже если я не вызываю метод get (), он все равно выполняет свою работу.Так что я понимаю get (), как будто будущее возвращает что-то, что будет иметь смысл, иначе get () не нужно для будущего, которое ничего не возвращает.

//Since it does not return something two statements below do the same thing.

CompletableFuture.runAsync(doSomething()); 
CompletableFuture.runAsync(doSomething()).get(); 

private final CompletableFuture<Void> doSomething() {
 //do something 
    return null;
}

1 Ответ

0 голосов
/ 11 октября 2018

Основная цель get () - дождаться завершения задания и вернуть результат.

Если ваша задача - Runnable , а не Callable , она вернет Void, так что, как вы указали, нет смысла проверять результат.Для таких задач вы выполняете get () только до и ждите, пока они завершатся .

Основными преимуществами CompletableFuture являются методы, которые позволяют обрабатывать исключения и дополнительно обрабатывать данные.У него также есть методы, которые ждут завершения задачи all и из набора задач ComplatableFuture.Так что работать в многопоточной среде намного проще.Метод get() работает так же, как и для класса Future .

ОБНОВЛЕНИЕ:

Если вам не требуется, чтобы они завершились до дальнейшей передачи в вашем приложении, вам вовсе не нужно вызывать метод get ().Но было бы разумно сохранить ссылку на них и подождать, пока они завершат или отменит их, прежде чем выходить из программы.В какой-то момент программы вы, вероятно, захотите узнать, завершились ли они.

Но если вы хотите завершить выполнение, прежде чем идти дальше, вы можете использовать CompletableFuture.allOf().

Inв некоторых случаях также целесообразно добавить тайм-аут к их выполнению, чтобы у вас не было зависания потока в вашем приложении.Это может быть опасно, особенно в мобильной среде.

Так что все зависит от вашего бизнес-кейса.

...