ExecutorService
- Java kursu
- İleri seviye
- Ders 61/82
- 5 dk
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 bekleFuture.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
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
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
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<?> f = pool.____(() -> System.out.println("Görev"));
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 |