Java
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.
Örnek çözümü göster
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();
}
}
Kendini test et
-
Bir ExecutorService nasıl kapatılır?
- shutdown()
- close()
- terminate()
- stop()
Cevabı göster
shutdown() — shutdown() havuzu nazikçe kapatır.
-
submit çağrısını tamamla
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<?> f = pool.____(() -> System.out.println("Görev"));
Cevabı göster
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<?> f = pool.submit(() -> System.out.println("Görev"));
-
ExecutorService yöntemlerini eşleştir
- submit()
- Görevi havuza verir
- shutdown()
- Havuzu kapatır
- newSingleThreadExecutor()
- Tek iş parçacıklı havuz
- newFixedThreadPool(n)
- n iş parçacıklı havuz
Sıradaki ders: Callable ve Future