Concurrency Intermedio

Obtén muchas URLs concurrentemente con virtual threads y 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();
}
¿Ves un problema con este código? Cuéntanos.
♾️

Un hilo por solicitud

Sin dimensionar pools — un virtual thread por URL.

📖

Código simple

Escribe código bloqueante directo y sencillo.

Alto rendimiento

Miles de solicitudes concurrentes con recursos mínimos.

Enfoque Antiguo
Thread Pool + URLConnection
Enfoque Moderno
Virtual Threads + HttpClient
Desde JDK
21
Dificultad
Intermedio
HTTP concurrente con virtual threads
Disponible

Ampliamente disponible desde JDK 21 LTS (sept. 2023)

Los virtual threads hacen práctico crear un hilo por solicitud HTTP. Combinado con HttpClient, esto reemplaza patrones complejos de callbacks asíncronos con código bloqueante simple que escala.

Compartir 𝕏 🦋 in