CodeBlanks Logo Icon CodeBlanks

ExecutorService

ExecutorService ile iş parçacığı havuzunu öğrenirsin.

ExecutorService

ExecutorService, iş parçacığı havuzunu yöneten arayüzdür. Executors.newSingleThreadExecutor() tek iş parçacıklı, newFixedThreadPool(n) n iş parçacıklı bir havuz verir.

ExecutorService pool =
    Executors.newSingleThreadExecutor();
pool.submit(() -> System.out.println("Görev"));
pool.shutdown();

Görevleri kendin new Thread().start() ile başlatmak yerine havuza teslim edersin. Havuz, iş parçacıklarını yeniden kullanır ve maliyeti düşürür. İş bitince shutdown() ile havuzu kapatırsın. Bu, üretim kodunda tercih edilen yaklaşımdır.

submit ve Runnable

submit() bir Runnable alır ve bir Future döndürür. Görev havuza teslim edilir; senFuture üzerinden durumunu izleyebilirsin.

Future<?> f = pool.submit(() -> {
    System.out.println("Koşuyor");
});
f.get();  // bitene kadar bekle

Future.get() görev bitene kadar çağırıcıyı bloklar. Bu, belirli çıktı sıralarını güvenceye alır. Görev exception fırlatırsa ExecutionException sarılı olarak alırsın. Bu denetim, eşzamanlı kodun okunmasını kolaylaştırır.

Uygulama ExecutorService ile görev çalıştır

Bir PoolDemo sınıfında main metodu yaz; Executors.newSingleThreadExecutor() ile bir havuz oluştur. pool.submit(() -> 2 + 3) ile bir görev teslim et (sonuç Future<Integer> olarak al). f.get() ile sonucu bekle ve System.out.println ile yazdır. Son olarak pool.shutdown() çağır.

Başlangıç kodu

Main.java
import java.util.concurrent.*;

// PoolDemo sınıfında main yaz

// newSingleThreadExecutor ile havuz oluştur

// submit ile 2+3 döndüren görev ver; get ile sonucu yazdır; shutdown çağır

Örnek çözüm

Main.java
import java.util.concurrent.*;

class PoolDemo {
    public static void main(String[] args) throws Exception {
        ExecutorService pool = Executors.newSingleThreadExecutor();
        Future<Integer> f = pool.submit(() -> 2 + 3);
        System.out.println(f.get());
        pool.shutdown();
    }
}

Beklenen çıktı

5

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir ExecutorService nasıl kapatılır?

  • shutdown() Doğru cevap
  • close()
  • terminate()
  • stop()

Açıklama: shutdown() havuzu nazikçe kapatır.

2 submit çağrısını tamamla

Soru
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<?> f = pool.____(() -> System.out.println("Görev"));
Cevap
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<?> f = pool.submit(() -> System.out.println("Görev"));

Açıklama: submit() bir Runnable alır ve Future döndürür.

3 ExecutorService yöntemlerini eşleştir

Kavram Anlamı
submit() Görevi havuza verir
shutdown() Havuzu kapatır
newSingleThreadExecutor() Tek iş parçacıklı havuz
newFixedThreadPool(n) n iş parçacıklı havuz

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