의 목적은 무엇인가 CompletableFuture 의 완전한 방법입니까?

0

질문

I've been doing some 에 대해 읽기 CompletableFuture.

지금 내가 이해하는 CompletableFuture 에서 다른 미래의 의미에서 제공하는 것을 의미하는 체인 선물 함께,콜백을 사용하를 처리하는 미래의 결과로 차단하는 코드입니다.

그러나,이 완료()메소드는 힘든 시간을 감싸는 내 머리를니다. 내가 알고있는 그것은 우리가 완전한 미래를 수동으로,그러나 무엇을 사용한다? 가장 일반적인 예제는 내가 발견을 위해 이 방법은 수행할 때 어떤 비동기업에,우리는 즉시 문자열을 반환에 대한 예입니다. 그러나 무엇이 포인트의 이렇게 하는 경우에는 반환 값을 반영하지 않는 실제 결과는? 만약 우리가 뭔가를 원하는 비동기적으로 왜 우리가 사용하여 정기적인 미래까요? 으로만 사용할 생각할 수 있을 때 우리가 원하는 조건에 따라 취소하려면 지속적인 미래입니다. 그러나 내가 생각하 나는 몇 가지 중요한 점이 여기에.

1

최고의 응답

1

전체()에 해당하는 함수에 변환의 이전 단계의 결과 반환 getResponse("a1=슬라마바드&a2=도시") 응답을 실행할 수 있습니다이 방법에 다른 스레드 때 getResponse()방법을 사용할 수 있는 응답한 다음 thenApply()호출됩 인쇄하는 로그에 있습니다. 아무도 차단됩니다 실행하는 경우 getResponse(String 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ý
..................................................................................................................