Junior
İş Parçacığı Havuzu nedir?
sobes.tech yapay zeka
AI'dan gelen yanıt
ThreadPool (İş Parçacığı Havuzu) — tek bir varlık tarafından yönetilen ve görevleri alan, kullanılabilir iş parçacıkları arasında dağıtan bir işçi iş parçacıkları grubudur. Her görev için yeni bir iş parçacığı oluşturmak yerine, havuz mevcut olanları yeniden kullanır.
Ana avantajlar:
- Maliyetleri azaltma: İş parçacıklarının oluşturulması ve yok edilmesi zaman ve kaynak tüketir. Havuz bu ihtiyacı ortadan kaldırır.
- Kaynak yönetimi: Aynı anda çalışan maksimum iş parçacığı sayısını sınırlar, sistem kaynaklarının tükenmesini önler.
- Performans artışı: Görev kuyruğunu yönetir, bu da uygulamaların işlem kapasitesini artırabilir.
- Yönetim kolaylığı: Asenkron görevleri yürütmek için merkezi bir mekanizma sağlar.
Java'da, iş parçacığı havuzlarıyla çalışmak için java.util.concurrent paketi kullanılır. Temel arayüzler ve sınıflar:
Executor: Görevleri yürütmek için arayüz.ExecutorService:Executor'ın genişlemesi olup, havuzun yaşam döngüsünü yönetmek ve görev sonuçlarını almak için yöntemler sağlar.Executors:ExecutorService'in standart uygulamalarını oluşturmak için yardımcı sınıf, örneğin:newFixedThreadPool(int nThreads): Sabit sayıda iş parçacığı olan havuz.newCachedThreadPool(): Gerektikçe iş parçacıkları oluşturan ve kullanılmayanları yeniden kullanan havuz.newSingleThreadExecutor(): Tek bir iş parçacığı olan havuz.newScheduledThreadPool(int corePoolSize): Zamanlanmış görevleri yürütmek için havuz.
ThreadPoolExecutor: Havuz davranışını daha ince ayar yapmaya olanak tanıyan esnek birExecutorServiceuygulaması.
ExecutorService kullanımı örneği:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
// Havuzda yürütülecek görev örneği
class MyTask implements Runnable {
private final int taskId;
public MyTask(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Görev " + taskId + " yürütülüyor, thread: " + Thread.currentThread().getName());
try {
Thread.sleep(100); // İş simülasyonu
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
public class ThreadPoolExample {
public static void main(String[] args) {
// Sabit sayıda iş parçacığı olan havuz oluştur
ExecutorService executorService = Executors.newFixedThreadPool(3);
// Görevleri yürütmek için gönder
for (int i = 0; i < 10; i++) {
executorService.submit(new MyTask(i));
}
// Tüm görevler tamamlandıktan sonra havuzu düzgün şekilde kapat
executorService.shutdown();
}
}
Havuzun yaşam döngüsü, shutdown() ve shutdownNow() metodlarıyla düzgün şekilde durdurulur.