Concurrency Intermediário

Busque muitas URLs simultaneamente com virtual threads e 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();
}
Viu um problema com este código? Nos avise.
♾️

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
HTTP concorrente com virtual threads
Disponível

Amplamente disponível desde o JDK 21 LTS (setembro de 2023)

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.

Compartilhar 𝕏 🦋 in