Java'da örtülü iş parçacığı oluşturma, genellikle iş parçacığı havuzlarının kullanılmasıyla gerçekleştirilir. Bir iş parçacığı havuzu, esasen, birden fazla görevi aynı anda yürütmek için yeniden kullanılabilecek bir iş parçacığı havuzunu korur. İş parçacığı havuzuna bir görev gönderildiğinde, bu görev havuzdaki mevcut iş parçacıklarından birine atanır ve bu görev, görevi havuzdaki diğer görevlerle eşzamanlı olarak yürütür.
Örtük iş parçacığının çeşitli avantajları vardır:
1. Basitleştirilmiş Konu Yönetimi: Bireysel ileti dizilerini oluşturma, başlatma ve yönetme konusunda endişelenmenize gerek yok. İş parçacığı havuzu bu ayrıntıları sizin için yöneterek sizi düşük seviyeli iş parçacığı oluşturma işlemlerinin yükünden kurtarır.
2. Verimli Kaynak Kullanımı: İş parçacığı havuzları, gereksiz iş parçacığı oluşturulmasını önleyerek ve yeni iş parçacıkları başlatmayla ilişkili yükü azaltarak mevcut iş parçacıklarını yeniden kullanabilir. Bu optimizasyon daha iyi kaynak kullanımına yol açar.
3. Ölçeklenebilirlik: İş parçacığı havuzları, yüke bağlı olarak etkin iş parçacıklarının sayısını dinamik olarak ölçeklendirebilir. İş yükü arttığında, iş parçacığı havuzu artan talebi karşılamak için daha fazla iş parçacığı oluşturabilir ve yük azaldığında, kaynaklardan tasarruf etmek için iş parçacığı havuzunu daraltabilir.
4. Geliştirilmiş Eşzamanlılık: İş parçacığı havuzlarıyla örtülü iş parçacığı oluşturma, birden çok işlemci ve çekirdeğin avantajlarından yararlanan kodları kolayca yazmanıza olanak tanıyarak uygulamalarınızda verimli eşzamanlılık ve paralellik sağlar.
5. Yerleşik Senkronizasyon ve Planlama: İş parçacığı havuzları, paylaşılan kaynaklara senkronize erişim sağlayarak yarış koşullarından kaçınır ve veri bütünlüğünü sağlar. Ayrıca görevleri iş parçacıkları arasında etkili bir şekilde dağıtmak, performansı optimize etmek ve bekleme sürelerini azaltmak için verimli planlama algoritmaları da uygularlar.
Java'da yaygın olarak kullanılan bazı iş parçacığı havuzları şunları içerir:
- FixedThreadPool: İş yüküne bakılmaksızın sabit sayıda iş parçacığını korur.
- Önbelleğe AlınmışThreadPool: Gerektiğinde yeni iş parçacıkları oluşturur ve bunları belirli bir süre canlı tutarak iş parçacıklarının sonraki görevler için hızlı bir şekilde yeniden kullanılmasına olanak tanır.
- ScheduledThreadPool: Görevlerin gecikmeli ve periyodik olarak yürütülmesini destekler.
Java'da bir iş parçacığı havuzuyla örtülü iş parçacığı kullanmanın basit bir örneği:
```java
java.util.concurrent.ExecutorService'i içe aktarın;
java.util.concurrent.Executors'ı içe aktarın;
genel sınıf ImplicitThreadingExample {
public static void main(String[] args) {
// 5 thread'li bir thread havuzu oluşturalım
ExecutorService threadPool =Executors.newFixedThreadPool(5);
// Görevleri iş parçacığı havuzuna gönder
for (int i =0; i <10; i++) {
threadPool.submit(() -> {
// Burada bazı görevleri gerçekleştirin...
System.out.println("Görev " + i + " " iş parçacığında yürütüldü + Thread.currentThread().getName());
});
}
// Görevler tamamlandığında iş parçacığı havuzunu kapat
threadPool.shutdown();
}
}
''''
Bu örnekte, bir iş parçacığı havuzunu temsil etmek için 'ExecutorService' arayüzü kullanıldı. `Submit()` yöntemi, görevleri yürütülmek üzere iş parçacığı havuzuna göndermek için kullanılır. Görevler havuzdaki mevcut iş parçacıklarında eşzamansız olarak yürütülür ve çıktı konsola yazdırılır.
Örtülü iş parçacığı ve iş parçacığı havuzları, basitleştirilmiş iş parçacığı yönetimi, kaynak kullanımı, eşzamanlılık ve senkronizasyon sunarak Java'da verimli ve ölçeklenebilir çok iş parçacıklı uygulamalar yazmak için güçlü bir mekanizma sağlar.