首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用现代Java 8特性异步发出2个HTTP请求?

如何使用现代Java 8特性异步发出2个HTTP请求?
EN

Stack Overflow用户
提问于 2020-07-13 05:42:20
回答 1查看 69关注 0票数 1

我来自JS世界,试图理解异步编程在现代Java中是如何工作的。我读到这个主题最近的重大更新是在Java8中进行的,他们引入了CompletableFuture类,但它似乎有点复杂,我想如果我与一些我已经知道的东西有一些相似之处,会更容易理解。

在现代Node.js中,为了通过异步调用(IO、网络等)异步执行两个函数,我会编写Promise.all(function1(), function2())

假设我想异步发出3个HTTP Get请求,获取执行结果并在某个名为consumeResults()的函数中使用它。下面是我在Node.js中是如何做的

代码语言:javascript
复制
async function executeAndDoSomethingWithResults() {
   const request1 = httpGetRequest("url1")
   const request2 = httpGetRequest("url2")
   const request3 = httpGetRequest("url3")
   const results = await Promise.all([request1, request2, request3])
   consumeResults(results)
}

async function httpGetRequest(url) {
   // blablabla
   // wrap the native http module to return a Promise
}

在Java 8+中,有什么可以替代这段代码呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-13 06:17:42

在Java中,您可以模仿相同的行为和设计

代码语言:javascript
复制
void executeAndDoSomethingWithResults() {

    CompletableFuture<SomeClass> request1 = httpGetRequest("url1");
    CompletableFuture<SomeClass> request2 = httpGetRequest("url2");
    CompletableFuture<SomeClass> request3 = httpGetRequest("url3");

    CompletableFuture.allOf(request1, request2, request3)
                        .thenApply(ignore -> 
                          consumeResults(request1.join(), request2.join(), request3.join())
                        );
}

CompletableFuture<SomeClass> httpGetRequest(final String url) {
    // blablabla
}

代码可以进行更多的优化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62866737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档