¿Cuál es el propósito de CompletableFuture completa del método?

0

Pregunta

He estado leyendo algo sobre CompletableFuture.

Ahora entiendo que CompletableFuture es diferente de Futuro en un sentido de que proporciona los medios para la cadena de futuros juntos, para uso de devolución de llamada para manejar los Futuros del resultado sin llegar a bloquear el código.

Sin embargo, no es este completo() método que estoy teniendo un tiempo difícil de envolver mi cabeza alrededor. Sólo sé que se nos permite realizar en un futuro de forma manual, pero ¿cuál es el uso de ella? Los ejemplos más comunes que he encontrado para este método es cuando se hace alguna tarea asíncrona, que de inmediato se puede devolver una cadena, por ejemplo. Pero ¿cuál es el punto de hacerlo, si el valor de retorno no refleja el resultado real? Si queremos hacer algo de forma asincrónica ¿por qué no uso regular de futuro en su lugar? El único uso que se me ocurre es cuando queremos condicionalmente cancelar un curso futuro. Pero creo que me estoy perdiendo algunos puntos clave importante aquí.

1

Mejor respuesta

1

completa() es equivalente a la función de transformación de la etapa anterior, el resultado y volver getResponse("a1=Chittagong y a2=ciudad") la respuesta, puede ejecutar este método en un subproceso diferente cuando getResponse() los métodos de la respuesta, a continuación, thenApply() se invoca para el registro de impresión. nadie va a ser bloqueado si se ejecuta getResponse(String url) en un subproceso diferente.

Este ejemplo muestra un escenario en el que se está imprimiendo un registro al obtener respuestas de completar();

Código

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

En otros idiomas

Esta página está en otros idiomas

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