Concurrency Intermédiaire

Récupère de nombreuses URLs en parallèle avec les threads virtuels et HttpClient.

✕ Java 8
ExecutorService pool =
    Executors.newFixedThreadPool(10);
List<Future<String>> futures =
    urls.stream()
    .map(u -> pool.submit(
        () -> fetchUrl(u)))
    .toList();
// manual shutdown, blocking get()
✓ Java 21+
try (var exec = Executors
    .newVirtualThreadPerTaskExecutor()) {
    var results = urls.stream()
        .map(u -> exec.submit(
            () -> client.send(req(u),
                ofString()).body()))
        .toList().stream()
        .map(Future::join).toList();
}
Un problème avec ce code ? Dites-le nous.
♾️

Un thread par requête

Sans dimensionner les pools — un thread virtuel par URL.

📖

Code simple

Écrivez du code bloquant direct et simple.

Haute performance

Des milliers de requêtes concurrentes avec des ressources minimales.

Ancienne Approche
Thread Pool + URLConnection
Approche Moderne
Virtual Threads + HttpClient
Depuis JDK
21
Difficulté
Intermédiaire
HTTP concurrent avec les threads virtuels
Disponible

Disponible depuis JDK 21 LTS (sept. 2023)

Les threads virtuels rendent pratique la création d'un thread par requête HTTP. Combiné avec HttpClient, cela remplace des patterns complexes de callbacks asynchrones par du code bloquant simple qui passe à l'échelle.

Partager 𝕏 🦋 in