Java’da Multithreading – Bölüm 6: Geri Sayım İçin CountDownLatch Yardımcı Sınıfı

Java’nın dahili kütüphanelerinde “multithreading” programlamaya dair pek çok yardımcı sınıf mevcuttur. (java.util.concurrent.*) Bunlardan biri de bu bölümde ele alacağımız “CountDownLatch” sınıfıdır. “Count down” “geri sayım”, “latch” “kapı sürgüsü/kilit mandalı” manalarına gelmektedir.

Geri sayım tamamlanıncaya kadar CountDownLatch örneğinin “await()” metodunu çağıran tüm threadler bekletilir. Geri sayım tamamlandığında bir anlamda kapı sürgüsü açılır ve bekleyen threadler işlemeye devam eder. Örneğin “n” sayıda threadin işlerini bitirdiklerini bildirene kadar (yani her biri sayacı bir azaltana ve nihayetinde sayacın değeri sıfıra ulaşana kadar) ana threadin bekletilmesi istediğimiz bir durumda kullanılabilir:

public class Application {

    public static void main(String[] args) {
        CountDownLatch latch = new CountDownLatch(3);

        ExecutorService executorService = Executors.newFixedThreadPool(3);

        for (int i = 0; i < 3; i++) {
            executorService.submit(new Thread(new Processor(latch)));
        }

        try {
            latch.await();
        } catch (InterruptedException e) {
        }

        System.out.println("Program bitti.");
    }

}

class Processor implements Runnable {

    private CountDownLatch latch;

    public Processor(CountDownLatch latch) {
        this.latch = latch;
    }

    @Override
    public void run() {
        System.out.println("Thread başladı.");

        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
        }

        latch.countDown();
    }

}

Okumaya devam et