Java CompletableFuture get Метод

У меня возникли проблемы с пониманием 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 ответ

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

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

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

ОБНОВИТЬ:

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

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

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

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

Другие вопросы по тегам