อะไรคือจุดประสงค์ของ CompletableFuture สมบูรณ์วิธีการ?

0

คำถาม

ฉันกำลังทำอะไรบางอย่าอ่านหนังสือเกี่ยวกับ CompletableFuture.

ตอนนี้ฉันเข้าใจว่า CompletableFuture มันต่างออกจากอนาคตอยู่ในความรู้สึกว่ามันใช้สำหรับให้ข้อมูลหมายถึงต้องล่ามโซ่นาคตด้วยกัน,เพื่อใช้เรียกกลับไปจัดการอนาคตคือผลลัพธ์โดยไม่มีจริงๆจอดปิดทางที่เป็นรหัสมอส

อย่างไรก็ตามนั่นคือนี้สมบูรณ์()วิธีการที่ผมมีช่วงเวลาที่ยากลำบากมากห่วนเวียนอยู่ในห้วของฉัน ฉันรู้ว่ามันจะอนุญาตให้พวกเราต้องสมบูรณ์อนาคตด้วยตนเอง,แต่อะไรคือการใช้สำหรับมัน? คนส่วนใหญ่เหมือนกันตัวอย่างผมเจอเรื่องนี้วิธีการคือตอนที่มาทำอะไรบางอย่า async งานเราสามารถเดี๋ยวนี้กลับมาเป็นข้อความสำหรับตัวอย่าง แต่อะไรคือจุตประสงค์ที่ต้องทำดังนั้นถ้ากลับคืนค่าไม่ได้ไตร่ตรองที่แท้จริงผล? ถ้าเราอยากจะทำบางอย่าง asynchronously ทำไมเราไม่แค่ใช้ประจำอนาคตแทน? คนเดียวที่ใช้ผมคิดได้ตอนที่เราอยากจะ conditionally ยกเลิกการยังดำเนินการอยู่อนาคต แต่ฉันคิดว่าฉันหายไปบางอย่างสำคัญกุญแจคะแนนอยู่ที่นี่

1

คำตอบที่ดีที่สุด

1

สมบูรณ์()คืมพล่ามคำเชยๆออกมาไม่หยุดที่จะฟังก์ชันกำลังเปลี่ยนแปลงก่อนขั้นเป็นผลลัพธ์แล้วกลับมา getResponse("a1=bangladesh. kgm&a2=เมือง") การตอบสนองคุณสามารถวิ่งนี้วิธีการในมุมมองที่ต่างออกด้า ตอนที่ getResponse()วิธีการของการตอบสนอยู่แล้ว thenApply()จะ invoked เพื่อพิมพ์ปูมบันทึก. ไม่มีใครจะถูกปิดกั้นหากคุณวิ่ง getResponse(ข้อความที่อยู่ url)ในมุมมองที่ต่างออกเส้นด้าย

นี่ตัวอย่างแสดงการสร้างสถานการณ์จำลองที่เราเป็นการพิมพ์เป็นปูมบันทึกในขณะที่ได้ฟื้นคืนชีพจากสมบูรณ์();

รหัส

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ý
..................................................................................................................