Arşivler

Java CountDownLatch Nedir?

Java Multithreading Nedir
Java Multithreading Nedir

Bu yazıda Java’da kullanılan CountDownLatch nedir, neden kullanılır ve bir örnek ile açıklamaya çalışacağım.

İlgini Çekebilir: Java’da Multithreading Dersleri

CountDownLatch Nedir?

CountDownLatch, threadlerimizin belirli sayıda işlemin tamamlanmasını beklemesine olanak tanıyan senkronizasyon yardımcısıdır. Vereceğimiz değer sayesinde bu geri sayım sonlandığında bekletilen threadler çalışmaya devam eder.

CountDownLatch kullanırken dikkat etmemiz gereken önemli bir nokta tek kullanımlık olmasıdır.

CountDownLatch’a Neden Ihtiyaç Duyabiliriz?

  • Tum multithread işlemlerin bitmesini garanti etmek için kullanabiliriz
  • Servislerin başlatma sırasını yönetmek için kullanabiliriz

CountDownLatch Proje Örneği

public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        int serviceCount = 3;
        CountDownLatch latch = new CountDownLatch(serviceCount);

        for (int i = 1; i <= serviceCount; i++) {
            int serviceId = i;
            new Thread(() -> {
                try {
                    System.out.println("Servis " + serviceId + " başlatılıyor.");
                    Thread.sleep((long) (Math.random() * 1000));
                    System.out.println("Servis " + serviceId + " başlatıldı.");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    latch.countDown();
                }
            }).start();
        }
        latch.await();
        System.out.println("Tüm servisler çalışıyor. Sistem başlatılmaya hazır.");
    }
}Code language: JavaScript (javascript)
  1. satırda countDown() 3 kez çağrılana kadar bekleyecek bir CountDownLatch oluşturuyoruz.
  2. satırda rastgele bir süre uyuyarak servisin başlatılma süresini demo olarak ayarladık.
  3. satırda servis bittiği için latch’in sayacını 1 azaltıyoruz.
  4. satırda tüm servislerin (3 adet) bitmesini bekliyoruz.

Çıktı olarak ise aşağıdaki gibi olabilir.

Servis 1 başlatılıyor.
Servis 2 başlatılıyor.
Servis 3 başlatılıyor.
Servis 2 başlatıldı.
Servis 1 başlatıldı.
Servis 3 başlatıldı.
Tüm servisler çalışıyor. Sistem başlatılmaya hazır.