CodeBlanks Logo Icon CodeBlanks

Özet - Concurrent API

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

Main.java
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

Main.java
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

Main.java
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

Main.java
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

İleri seviye bölümündeki tüm dersler