का उद्देश्य क्या है CompletableFuture की पूरी विधि है?

0

सवाल

मैं कर रहा हूँ कुछ के बारे में पढ़ने के CompletableFuture.

अब के रूप में मैं समझता हूँ कि CompletableFuture से अलग है भविष्य में एक भावना है कि यह प्रदान करता है के लिए इसका मतलब श्रृंखला वायदा करने के लिए, एक कॉलबैक का उपयोग संभाल करने के लिए भविष्य के परिणाम के बिना वास्तव में अवरुद्ध कोड.

हालांकि, वहाँ है इस पूर्ण विधि() है कि मैं कर रहा हूँ एक कठिन समय मेरे सिर लपेटकर चारों ओर. मैं सिर्फ इतना पता है कि यह हमें की अनुमति देता है को पूरा करने के लिए एक भविष्य मैन्युअल रूप से, लेकिन क्या है के उपयोग के लिए यह? सबसे आम उदाहरणों में मैंने पाया कि इस विधि के लिए है जब ऐसा कुछ async कार्य कर सकते हैं, हम तुरंत वापसी के लिए एक स्ट्रिंग उदाहरण है । लेकिन क्या है की बात तो कर रही है, तो वापसी मान को प्रतिबिंबित नहीं करता है वास्तविक परिणाम? अगर हम कुछ करना चाहते हैं asynchronously क्यों नहीं हम सिर्फ नियमित रूप से भविष्य के बजाय? केवल मैं उपयोग कर सकते हैं के बारे में सोचना है, जब हम चाहते हैं करने के लिए सशर्त रद्द चल रहे एक भविष्य है । लेकिन मुझे लगता है कि मैं याद कर रहा हूँ कुछ महत्वपूर्ण कुंजी अंक यहाँ.

1

सबसे अच्छा जवाब

1

पूर्ण() के बराबर है समारोह को बदलने के पिछले चरण के परिणाम और लौटने getResponse("a1=चटगांव और ए 2=शहर") जवाब में, आप कर सकते हैं चलाने के लिए इस विधि में एक अलग थ्रेड जब getResponse() तरीकों में प्रतिक्रिया उपलब्ध तो thenApply() लागू किया जा मुद्रित करने के लिए लॉग इन करें. कोई भी अवरुद्ध हो जाएगा, तो आप चलाने के लिए getResponse(स्ट्रिंग यूआरएल) में एक अलग थ्रेड.

इस उदाहरण से पता चलता है, जहां एक परिदृश्य हम मुद्रण कर रहे हैं एक लॉग हो रही है, जबकि प्रतिक्रियाओं से पूर्ण();

कोड

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

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

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

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में