Java’da Multithreading ( Thread Pool, ExecutorService) – 5
Thread işlemleri yaparken Thread Pool nasıl türleri örnekleri Avantajları nelerdir Uygulama örneği ile göstereceğim.
Thread Pool’a Neden İhtiyaç Duyarız?
Programımızda kullandığımız thread’leri kullanırken her seferinde yeniden oluşturma işlemi oldukça maliyetlidir. Ancak önceden bir thread pool yaparak ihtiyaca göre o pool’dan alıp işlem bitince tekrar o pool’daki thread’i kullanmak bizim ölçülebilir bir maliyet ile birlikte gereksiz kaynak tüketiminin de önüne geçiy
Thread pool’daki threadlerimiz sırası ile çalışmakta ve işi biten thread’ler tekrar kullanılmak üzere thread pool içerisinde beklemeye devam etmektedir. Programızda thread oluşturmak yerine thread pool’undan thread çağırmamız yeterli oluyor.
ThreadPool Türleri
Java’da ThreadPool oluşturmak için farklı ihtiyaçlara göre farklı yaklaşımlar bulunmakta. Şimdi bunları biraz açıklayalım.
- Fixed
Belirli bir thread sayısı verdiğimiz eğer tüm thread’ler dolu ise bekletilen ve en çok tercih edilen yaklaşım. - Scheduled
Belirli bir zaman aralığıyla yapılan işlemlerde tercih edilen thread yapısıdır. - Single
Adından da anlaşıldığı üzere bir adet thread vardır.
Tüm işler için tek bir thread yapısı oluşturulu ve tek bir iş için tercih kullanmalıyız
ExecutorService
Thread Pool yapabiliyoruz. ExecutorService kullanarak aynı anda kaç thread’in çalışması gerektiğini belirleyen örneğimizi yazalım.
private void executorServiceNewFixedThreadPool() {
ExecutorService executorService = Executors.newFixedThreadPool(5);
for (int a = 0; a < 5000; a++) {
executorService.execute(new Runnable() {
@Override
public void run() {
System.out.println("Çalışan Executer Service: " + Thread.currentThread().getName())
}
});
}
}
Code language: JavaScript (javascript)
Çıktımıza bakalım.
ExecuterServicee: pool-7-thread-5
ExecuterServicee: pool-7-thread-2
ExecuterServicee: pool-7-thread-1
ExecuterServicee: pool-7-thread-3
ExecuterServicee: pool-7-thread-4
ExecuterServicee: pool-7-thread-1
ExecuterServicee: pool-7-thread-3
Code language: HTTP (http)
Kod örneğinde tanımladığımız thread sayısından fazla olmamak şartıyla 5000 işlem için sadece 5 thread çalıştı. İşi biten tekrar havuza geldi ve threadimiz tekrar çalıştı.
No Comment! Be the first one.