Qual è lo scopo di CompletableFuture completa di metodo?

0

Domanda

Ho fatto qualche lettura su CompletableFuture.

Ora come ora ho capito che CompletableFuture è diverso dal Futuro, nel senso che essa fornisce i mezzi per catena futures insieme, per l'utilizzo di callback per gestire la Futura risultato senza il blocco di codice.

Tuttavia, c'è questo() metodo che sto avendo un momento difficile avvolgere la mia testa intorno. Io so solo che ci consente di completare un futuro manualmente, ma che cosa è l'uso di esso? Gli esempi più comuni che ho trovato per questo metodo è fare alcune attività async, possiamo immediatamente restituire una stringa, per esempio. Ma qual è il punto di farlo se il valore di ritorno non riflettono l'effettivo risultato? Se vogliamo fare qualcosa in modo asincrono perché non lo uso regolare in futuro, invece? L'unico utilizzo che mi viene in mente è quando si desidera condizionale di annullare un corso futuro. Ma penso che mi manca di alcuni importanti punti chiave qui.

1

Migliore risposta

1

completa() è equivalente alla funzione di trasformare la fase precedente risultato e alla restituzione di getResponse("a1=Chittagong&a2=città") di risposta, è possibile eseguire questo metodo in un altro thread quando getResponse() metodi di risposta disponibile, thenApply() verrà richiamato al registro di stampa. nessuno verrà bloccato se si esegue getResponse(String url) in un altro thread.

Questo esempio mostra uno scenario in cui ci sono la stampa di un registro, mentre ottenere risposte complete();

Codice

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

In altre lingue

Questa pagina è in altre lingue

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