Java

HttpClient — Async (CompletableFuture)

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`sendAsync` returns a `CompletableFuture<HttpResponse<T>>` — chain it like any other CF. Fan out N requests, wait for all with `CompletableFuture.allOf`.
Java
Raw
import java.net.URI;
import java.net.http.*;
import java.util.*;
import java.util.concurrent.*;

class Demo {
    static final HttpClient client = HttpClient.newHttpClient();

    CompletableFuture<String> fetchAsync(String url) {
        var req = HttpRequest.newBuilder(URI.create(url)).GET().build();
        return client
            .sendAsync(req, HttpResponse.BodyHandlers.ofString())
            .thenApply(HttpResponse::body);
    }

    public static void main(String[] args) {
        var urls = List.of("https://example.com", "https://example.org", "https://example.net");

        // Fire all concurrently, collect results in order
        var futures = urls.stream()
            .map(new Demo()::fetchAsync)
            .toList();

        // Wait for all — allOf returns CF<Void>, so flatten manually
        CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])).join();

        for (int i = 0; i < urls.size(); i++) {
            System.out.println(urls.get(i) + " → " + futures.get(i).join().length() + " bytes");
        }
    }
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.