HTTP concurrent avec les threads virtuels
Récupère de nombreuses URLs en parallèle avec les threads virtuels et HttpClient.
Comparaison de Code
✕ 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();
}
Un problème avec ce code ? Dites-le nous.
Pourquoi la méthode moderne gagne
Un thread par requête
Sans dimensionner les pools — un thread virtuel par URL.
Code simple
Écrivez du code bloquant direct et simple.
Haute performance
Des milliers de requêtes concurrentes avec des ressources minimales.
Ancienne Approche
Thread Pool + URLConnection
Approche Moderne
Virtual Threads + HttpClient
Depuis JDK
21
Difficulté
Intermédiaire
Support JDK
HTTP concurrent avec les threads virtuels
Disponible
Disponible depuis JDK 21 LTS (sept. 2023)
Comment ça fonctionne
Les threads virtuels rendent pratique la création d'un thread par requête HTTP. Combiné avec HttpClient, cela remplace des patterns complexes de callbacks asynchrones par du code bloquant simple qui passe à l'échelle.
Documentation Associée