Aký je účel CompletableFuture je kompletný postup?

0

Otázka

Bol som robiť nejaké čítanie o CompletableFuture.

Ako teraz chápem, že CompletableFuture je odlišné od Budúcnosti v tom zmysle, že poskytuje prostriedky na reťaz futures spolu, * použiť spätný hovor zvládnuť Budúcnosť je výsledok bez vlastne blokuje kód.

Avšak, tam je to kompletný() metódy, ktoré som s ťažko balenie okolo mojej hlavy. Ja len viem, že to nám umožňuje kompletné budúcnosti ručne, ale to, čo je využitie na to? Najbežnejších príkladov som našiel na tejto metódy je, keď robí niektoré asynchrónnej úlohy, môžeme okamžite vrátia reťazec, napríklad. Ale to, čo je bod pritom ak vráti hodnotu neodráža skutočný výsledok? Ak chceme urobiť niečo asynchrónne prečo nie sme len pomocou pravidelných budúcich miesto? Na používajte len ma napadá, je, keď chceme podmienečne zrušiť prebiehajúceho budúcnosti. Ale myslím, že som chýbali niektoré dôležité kľúčové body tu.

1

Najlepšiu odpoveď

1

kompletné() je ekvivalentná s funkciou transformácia predchádzajúceho stupňa výsledok a vrátenie getResponse("a1=Chittagong&a2=mesto") odpoveď, môžete spustiť túto metódu v inom vlákne keď getResponse() metódy odpoveď k dispozícii, potom thenApply() bude uplatnená na tlač denníka. nikto sa zablokujú, ak spustíte getResponse(String url) v inom vlákne.

Tento príklad ukazuje, scenár, kde sme tlač prihlásiť a zároveň dostať odpovede od kompletný();

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 iných jazykoch

Táto stránka je v iných jazykoch

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