HTTP concorrente com virtual threads
Busque muitas URLs simultaneamente com virtual threads e HttpClient.
Comparação 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();
}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Uma thread por requisição
Sem dimensionamento de pool — uma virtual thread por URL.
Código simples
Escreva código bloqueante direto e legível.
Alta vazão
Milhares de requisições simultâneas com recursos mínimos.
Abordagem Antiga
Thread Pool + URLConnection
Abordagem Moderna
Virtual Threads + HttpClient
Desde o JDK
21
Dificuldade
Intermediário
Suporte JDK
HTTP concorrente com virtual threads
Disponível
Amplamente disponível desde o JDK 21 LTS (setembro de 2023)
Como funciona
Virtual threads tornam prático criar uma thread por requisição HTTP. Combinadas com HttpClient, substituem padrões complexos de callbacks assíncronos por código bloqueante simples que escala.
Documentação Relacionada