Quel est le but de CompletableFuture complète de la méthode?

0

La question

J'ai fait un peu de lecture à propos de CompletableFuture.

Comme de maintenant, je comprends que CompletableFuture est différente de l'Avenir, en ce sens qu'elle donne les moyens à la chaîne d'ensemble un avenir, à utiliser le callback pour gérer l'Avenir de la suite sans réellement bloquant le code.

Cependant, il y a cet() la méthode que je vais avoir un moment difficile de l'habillage de ma tête autour de. Je sais seulement qu'il nous permet de remplir un avenir manuellement, mais qu'est-ce que l'utilisation pour elle? Les exemples les plus courants que j'ai trouvé pour cette méthode est lorsque vous faites une tâche asynchrone, nous pouvons immédiatement retourner une chaîne de caractères par exemple. Mais qu'est-ce que le point de le faire si la valeur de retour ne reflète pas le résultat réel? Si nous voulons faire quelque chose de manière asynchrone pourquoi ne pas simplement utiliser régulièrement l'avenir à la place? La seule utilisation que je pense, c'est quand nous voulons conditionnellement annuler un cours d'avenir. Mais je pense que je suis pas certains des points clés importants ici.

1

La meilleure réponse

1

complet() est l'équivalent de la fonction de transformation de la phase précédente du résultat et le retour de getResponse("a1=Chittagong et a2=ville") la réponse, vous pouvez exécuter cette méthode dans un autre thread lorsque getResponse() les méthodes de réponse alors thenApply() sera appelée pour l'impression du journal. nul ne sera bloqué si vous exécutez getResponse(String url) dans un thread différent.

Cet exemple montre un scénario où nous sommes de l'impression d'un journal tout en obtenant des réponses de terminer();

Code

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class CompletableFutureEx {

    Logger logger = Logger.getLogger(CompletableFutureEx.class.getName());

    public static void main(String[] args) {
        new CompletableFutureEx().completableFutureEx();
    }

    private void completableFutureEx() {
        var completableFuture = new CompletableFuture<String>();
        completableFuture.thenApply(response -> {
            logger.log(Level.INFO, "Response : " + response);
            return response;
        });
        
        //some long process response
        try {
            completableFuture.complete(getResponse("a1=Chittagong&a2=city"));
        } catch (Exception e) {
            completableFuture.completeExceptionally(e);
        }

        try {
            System.out.println(completableFuture.get());
        } catch (InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }

    private String getResponse(String url) throws URISyntaxException, IOException, InterruptedException {
        var finalUrl = "http://localhost:8081/api/v1/product/add?" + url;
        //http://localhost:8081/api/v1/product/add?a1=Chittagong&a2=city
        var request = HttpRequest.newBuilder()
                .uri(new URI(finalUrl)).GET().build();
        var response = HttpClient.newHttpClient()
                .send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println("response body " + response.body());
        return response.body();
    }
}
2021-11-24 06:49:50

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................