Completablefuture'un complete yönteminin amacı nedir?

0

Soru

CompletableFuture hakkında bir şeyler okuyordum.

Şu an itibariyle, Completablefuture'un Future'dan farklı olduğunu anlıyorum, bir anlamda futures'ı bir araya getirmek, kodu gerçekten engellemeden Future'un sonucunu işlemek için geri aramayı kullanmak anlamına geliyor.

Ancak, kafamı sarmakta zorlandığım bu complete() yöntemi var. Sadece bir geleceği manuel olarak tamamlamamıza izin verdiğini biliyorum, ama bunun kullanımı nedir? Bu yöntem için bulduğum en yaygın örnekler, bazı zaman uyumsuz görevleri yaparken, örneğin bir dizeyi hemen döndürebilmemizdir. Ancak, dönüş değeri gerçek sonucu yansıtmıyorsa bunu yapmanın amacı nedir? Eşzamansız bir şey yapmak istiyorsak neden bunun yerine normal geleceği kullanmıyoruz? Düşünebildiğim tek kullanım, devam eden bir geleceği şartlı olarak iptal etmek istediğimiz zamandır. Ama sanırım burada bazı önemli noktaları kaçırıyorum.

1

En iyi cevabı

1

complete (), önceki aşamanın sonucunu dönüştüren ve getresponse'u döndüren işleve eşdeğerdir ("a1=Chittagong & a2 = city") yanıt olarak, bu yöntemi farklı bir iş parçacığında çalıştırabilirsiniz GetResponse() yöntemleri kullanılabilir olduğunda, günlüğü yazdırmak için thenApply () çağrılır. GetResponse(Dize URL'si) farklı bir iş parçacığında çalıştırırsanız kimse engellenmez.

Bu örnek, complete()öğesinden yanıt alırken günlüğü yazdırdığımız bir senaryoyu gösterir.;

Kod

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

Diğer dillerde

Bu sayfa diğer dillerde

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