Sanal iş parçacıklarıyla eşzamanlı HTTP
Sanal iş parçacıkları ve HttpClient ile birçok URL'yi eşzamanlı getirin.
Kod Karşılaştırması
✕ 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();
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
Modern yöntem neden daha iyi
İstek başına iş parçacığı
Havuz boyutlandırması yok — URL başına bir sanal iş parçacığı.
Basit kod
Anlaşılır bloklama kodu yazın.
Yüksek verim
Minimum kaynak kullanımıyla binlerce eşzamanlı istek.
Eski Yaklaşım
İş Parçacığı Havuzu + URLConnection
Modern Yaklaşım
Sanal İş Parçacıkları + HttpClient
JDK'dan itibaren
21
Zorluk
Orta
JDK Desteği
Sanal iş parçacıklarıyla eşzamanlı HTTP
Mevcut
JDK 21 LTS'den itibaren geniş çapta kullanılabilir (Eylül 2023)
Nasıl çalışır
Sanal iş parçacıkları, her HTTP isteği için bir iş parçacığı oluşturmayı pratik hale getirir. HttpClient ile birleştirildiğinde, karmaşık asenkron geri arama kalıplarının yerini ölçeklenen basit bloklama koduyla alır.
İlgili Belgeler