Concurrency Intermedio

Recupera molti URL in modo concorrente con thread virtuali 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();
}
Vedi un problema con questo codice? Faccelo sapere.
♾️

Thread per richiesta

Nessun dimensionamento del pool — un thread virtuale per URL.

📖

Codice semplice

Scrivi codice bloccante semplice.

Alta produttività

Migliaia di richieste concorrenti con risorse minime.

Approccio Vecchio
Pool di thread + URLConnection
Approccio Moderno
Thread virtuali + HttpClient
Dal JDK
21
Difficoltà
Intermedio
HTTP concorrente con thread virtuali
Disponibile

Ampiamente disponibile dal JDK 21 LTS (settembre 2023)

I thread virtuali rendono pratico creare un thread per richiesta HTTP. Combinati con HttpClient, questo sostituisce i complessi pattern di callback asincroni con semplice codice bloccante che scala.

Condividi 𝕏 🦋 in