Concurrency Orta

Sanal iş parçacıklarıyla eşzamanlı HTTP

Sanal iş parçacıkları ve HttpClient ile birçok URL'yi eşzamanlı getirin.

✕ 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.
♾️

İ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
Sanal iş parçacıklarıyla eşzamanlı HTTP
Mevcut

JDK 21 LTS'den itibaren geniş çapta kullanılabilir (Eylül 2023)

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.

Paylaş 𝕏 🦋 in