İleri düzey iş parçacığı desenleri

Java'da Kod Optimizasyonu

Pavlos Kosmetatos

Lead Engineer @Wealthyhood

İş parçacığı havuzu temelleri

İş parçacığı oluşturmak maliyetlidir!

$$

İş parçacığı havuzları:

  • Mevcut iş parçacıklarını yeniden kullanır
  • Eşzamanlı iş parçacığı sayısını kontrol eder
  • ExecutorService arayüzüyle yönetilir
Java'da Kod Optimizasyonu

İş parçacığı havuzu oluşturma

// 4 iş parçacıklı sabit havuz
ExecutorService fixedPool = Executors.newFixedThreadPool(4);


// İhtiyaca göre büyüyen önbellekli havuz ExecutorService cachedPool = Executors.newCachedThreadPool();
// Tek iş parçacıklı yürütücü ExecutorService singleExecutor = Executors.newSingleThreadExecutor();
Java'da Kod Optimizasyonu

Görev gönderme

ExecutorService executor = Executors.newFixedThreadPool(4);

// Geri dönüş değeri olmayan görev gönder
executor.execute(() -> System.out.println("Simple task"));

// Geri dönüş değerli görev (Callable) gönder
Future<Integer> future = executor.submit(() -> {
    Thread.sleep(1000);
    return 42;
});

// Future sonucunu al (tamamlanana kadar bloklar)
int result = future.get();
Java'da Kod Optimizasyonu

Yürütücüleri kapatma

// Kapatmayı sinyalle, mevcut görevler sürer
executor.shutdown();


// Sonlanmayı bekle (zaman aşımıyla) boolean terminated = executor.awaitTermination(5, TimeUnit.SECONDS);
// Anında kapat, çalışan görevleri iptal et executor.shutdownNow();
Java'da Kod Optimizasyonu

Tamamlanabilir future

  • CompletableFuture
  • Java 8'den beri eşzamanlılık API'sinin parçası
  • Modern asenkron programlama yaklaşımı
  • Elle ya da bir Function ile tamamlanabilir
  • Geri çağrılarla işlemleri zincirler
  • Açık iş parçacığı havuzlarıyla veya onsuz çalışır
Java'da Kod Optimizasyonu

Tamamlanabilir future oluşturma

// Varsayılan yürütücü ile async çalıştır
CompletableFuture<Void> runAsync = 
    CompletableFuture.runAsync(() -> performTask());

// Özel yürütücü ile async değer üret ExecutorService executor = Executors.newCachedThreadPool(); CompletableFuture<String> supplyAsync = CompletableFuture.supplyAsync(() -> fetchData(), executor);
Java'da Kod Optimizasyonu

İşlemleri zincirleme

CompletableFuture<String> future = CompletableFuture
    .supplyAsync(() -> fetchUserData(userId))
    .thenApply(data -> extractUsername(data))
    .exceptionally(ex -> "Unknown user");

// Hazır olduğunda sonuca erişim
future.thenAccept(result -> System.out.println(result));
Java'da Kod Optimizasyonu

Hadi pratik yapalım!

Java'da Kod Optimizasyonu

Preparing Video For Download...