HTTP concurrente con virtual threads
Obtén muchas URLs concurrentemente con virtual threads y HttpClient.
Comparación de Código
✕ 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.
Por qué gana la forma moderna
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
Soporte JDK
HTTP concurrente con virtual threads
Disponible
Ampliamente disponible desde JDK 21 LTS (sept. 2023)
Cómo funciona
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.
Documentación Relacionada