Özet - Concurrent API
- Java kursu
- İleri seviye
- Ders 66/82
- 5 dk
ExecutorService ve CompletableFuture'i birleştirerek paralel bir indirme yazarsın.
Özet - Concurrent API
Bu grupta java.util.concurrent'in temel araçlarını gördün: ExecutorService ile havuz, Callable ve Future ile sonuç, CompletableFuture ile zincir, ConcurrentHashMap ile güvenli harita ve Lock ile esnek kilitleme. Bu araçlar, modern eşzamanlı Java kodunun temelini oluşturur.
Şimdi bunları bir mini göreve birleştireceksin: paralel görevler yürüten bir ParallelSum yapısı kuracaksın. Bu özet, eşzamanlı kodun nasıl modüler biçimde yazıldığını gösterir.
Uygulama ParallelSum ile iki görevi topla
Bir ParallelSum sınıfında main yaz; Executors.newFixedThreadPool(2) ile havuz oluştur. İki Callable<Integer> görevi tanımla: biri () -> 10, diğeri () -> 20. İkisini submit ile havuza ver; get() ile sonuçları al; topla ve yazdır. shutdown() çağır.
Başlangıç kodu
import java.util.concurrent.*;
// ParallelSum sınıfında main yaz
// newFixedThreadPool(2) ile havuz oluştur; iki Callable submit et; get ile topla; shutdownÖrnek çözüm
import java.util.concurrent.*;
class ParallelSum {
public static void main(String[] args) throws Exception {
ExecutorService pool = Executors.newFixedThreadPool(2);
Future<Integer> a = pool.submit(() -> 10);
Future<Integer> b = pool.submit(() -> 20);
System.out.println(a.get() + b.get());
pool.shutdown();
}
}Beklenen çıktı
30
Uygulama CompletableFuture ile zincir
Yeni bir ChainDemo sınıfında main yaz; CompletableFuture.supplyAsync(() -> "hi") ile başla, .thenApply(s -> s.toUpperCase()) ile sonucu büyüt ve System.out.println(f.join()) ile yazdır.
Başlangıç kodu
import java.util.concurrent.*;
// ChainDemo sınıfında main yaz
// supplyAsync ile "hi" döndür; thenApply ile büyük harfe çevir; join ile yazdırÖrnek çözüm
import java.util.concurrent.*;
class ChainDemo {
public static void main(String[] args) {
CompletableFuture<String> f =
CompletableFuture.supplyAsync(() -> "hi").thenApply(s -> s.toUpperCase());
System.out.println(f.join());
}
}Beklenen çıktı
HI
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Bir görevin sonucunu beklemek için en uygun yöntem ne?
- Thread.sleep()
- Thread.yield()
- Object.wait()
- Future.get() Doğru cevap
Açıklama: Future.get() görev bitene kadar bekler.
2 Concurrent API özetini eşleştir
| Kavram | Anlamı |
|---|---|
ExecutorService |
Havuz yönetir |
Future |
Sonucu bekler |
CompletableFuture |
Zincir kurar |
Lock |
Esnek kilit |