我来自JS世界,试图理解异步编程在现代Java中是如何工作的。我读到这个主题最近的重大更新是在Java8中进行的,他们引入了CompletableFuture类,但它似乎有点复杂,我想如果我与一些我已经知道的东西有一些相似之处,会更容易理解。
在现代Node.js中,为了通过异步调用(IO、网络等)异步执行两个函数,我会编写Promise.all(function1(), function2())。
假设我想异步发出3个HTTP Get请求,获取执行结果并在某个名为consumeResults()的函数中使用它。下面是我在Node.js中是如何做的
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+中,有什么可以替代这段代码呢?
发布于 2020-07-13 06:17:42
在Java中,您可以模仿相同的行为和设计
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
}代码可以进行更多的优化。
https://stackoverflow.com/questions/62866737
复制相似问题