Jaký je účel CompletableFuture je kompletní metodu?

0

Otázka

Byl jsem dělat nějaké čtení o CompletableFuture.

Jak nyní chápu, že CompletableFuture je odlišná od Budoucnosti v tom smyslu, že poskytuje prostředky na řetěz futures spolu, používat callback zvládnout Budoucnost je výsledek, aniž by skutečně blokování kód.

Nicméně, tam je to dokončit() metoda, že jsem s těžko pobrat. Já jen vím, že nám to umožňuje kompletní budoucí ručně, ale to, co je využití? Nejčastější příklady, které jsem našel pro tuto metodu je, když dělá nějaký asynchronní task, můžeme okamžitě vrátit řetězec, například. Ale to, co je bod, přitom je-li návratová hodnota neodráží skutečný výsledek? Pokud chceme něco udělat asynchronně, proč ne my stačí použít pravidelné budoucí místo? Jediné využití mě napadá, je, když chceme podmíněně zrušit probíhající budoucnosti. Ale myslím, že mi chybí některé důležité klíčové body.

1

Nejlepší odpověď

1

dokončit() je ekvivalentní funkce transformuje předchozí fázi je výsledek a vrací getResponse("a1=Chittagong&a2=město") odpověď, můžete spustit tuto metodu v jiném vlákně když getResponse() metody reakci k dispozici, pak potéaplikovat (), bude vyvolána do tiskového protokolu. nikdo nebude zablokován, pokud spustíte getResponse(String url) v jiném vlákně.

Tento příklad ukazuje situaci, kdy jsme tisk protokolu při získávání odpovědí od úplného();

Kód

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

V jiných jazycích

Tato stránka je v jiných jazycích

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