是什么目的completablefuture对象是完整的方法?

0

的问题

我一直在做一些阅读有关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ý
..................................................................................................................