Middle
Java'da Executorlar nasıl çalışır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Executor — Java'da, görevleri iş parçacığı havuzunda yürütmek için bir sözleşme tanımlayan bir arayüzdür. Her görev için açıkça yeni iş parçacıkları oluşturmak yerine, görevleri yürütücülere iletersiniz ve bunlar iş parçacıklarının oluşturulmasını, kullanılmasını ve yok edilmesini yönetir.
Ana avantajlar:
- İş parçacığı yönetimi: İş parçacığı havuzunu yönetmek için birleşik bir yöntem sağlar, böylece manuel iş parçacığı oluşturma ve senkronizasyonu ortadan kalkar.
- Verimlilik: Mevcut iş parçacıklarını yeniden kullanır, yeni iş parçacıkları oluşturma ve yok etme maliyetlerini azaltır.
- Performans: Görevlerin asenkron yürütülmesi sayesinde uygulamaların performansını ve yanıt verme kabiliyetini artırır.
Executor'ın bir metodu vardır:
// Verilen komutu gelecekte bir zamanda yürütür.
void execute(Runnable command);
Sık kullanılan alt tipler:
ExecutorService:Executor'ı genişletir ve yürütücünün yaşam döngüsünü yönetmek ve görev sonuçlarını almak için ek metodlar sağlar (örneğin,Futurearacılığıyla).ScheduledExecutorService:ExecutorService'ı genişletir ve görevleri gecikmeli veya zamanlamalı olarak yürütmeye olanak tanır.
Executors sınıfı, çeşitli yürütücü türleri oluşturmak için fabrika metodları sağlar:
// Sabit sayıda iş parçacığı olan bir havuz oluşturur.
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
// Dinamik olarak iş parçacığı sayısını ayarlayabilen bir havuz oluşturur.
ExecutorService cachedThreadPool = Executors.newCachedThreadPool();
// Zamanlamalı görevleri çalıştırabilen bir havuz oluşturur.
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(3);
Kullanım örneği:
// Yürütücü nesnesi
ExecutorService executor = Executors.newFixedThreadPool(2);
// Yürütülecek görev
Runnable task = new Runnable() {
@Override
public void run() {
// Görev kodu
System.out.println("Görev, iş parçacığında çalışıyor: " + Thread.currentThread().getName());
}
};
// Görevi yürütücüye gönder
executor.execute(task);
// Yürütücüyü kapat (kaynakları serbest bırakmak için gereklidir)
executor.shutdown();
execute() çağrıldığında, yürütücü görevi (Runnable) alır ve yürütmek üzere kendi iş parçacıklarından birine atar. Görevlerin iş parçacıkları arasında dağıtımını ve yaşam döngüsünü yürütücü yönetir.