HTTP concorrente con thread virtuali
Recupera molti URL in modo concorrente con thread virtuali e HttpClient.
Confronto Codice
✕ 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.
Perché vince l'approccio moderno
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
Supporto JDK
HTTP concorrente con thread virtuali
Disponibile
Ampiamente disponibile dal JDK 21 LTS (settembre 2023)
Come funziona
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.
Documentazione Correlata