CountDownLatch, bir görevin başlamadan önce diğer iş parçacıklarını beklediğinden emin olmak için kullanılır. Uygulamasını anlamak için, ana görevin ancak gerekli tüm hizmetler başlatıldığında başlayabildiği bir sunucuyu ele alalım. CountDownLatch'in Çalışması: CountDownLatch'in bir nesnesini oluşturduğumuzda, bu tür iş parçacıklarının tamamlanmasından veya işe hazır hale gelmesinden sonra CountDownLatch.countDown() öğesini çağırarak bu tür tüm iş parçacıklarının geri sayım yapması için beklemesi gereken iş parçacığı sayısını belirtiriz. Sayım sıfıra ulaştığında bekleme görevi çalışmaya başlar. JAVA'daki CountDownLatch örneği: Java // Java Program to demonstrate how // to use CountDownLatch Its used // when a thread needs to wait for other // threads before starting its work. import java.util.concurrent.CountDownLatch; public class CountDownLatchDemo { public static void main(String args[]) throws InterruptedException { // Let us create task that is going to // wait for four threads before it starts CountDownLatch latch = new CountDownLatch(4); // Let us create four worker // threads and start them. Worker first = new Worker(1000 latch 'WORKER-1'); Worker second = new Worker(2000 latch 'WORKER-2'); Worker third = new Worker(3000 latch 'WORKER-3'); Worker fourth = new Worker(4000 latch 'WORKER-4'); first.start(); second.start(); third.start(); fourth.start(); // The main task waits for four threads latch.await(); // Main thread has started System.out.println(Thread.currentThread().getName() + ' has finished'); } } // A class to represent threads for which // the main thread waits. class Worker extends Thread { private int delay; private CountDownLatch latch; public Worker(int delay CountDownLatch latch String name) { super(name); this.delay = delay; this.latch = latch; } @Override public void run() { try { Thread.sleep(delay); latch.countDown(); System.out.println(Thread.currentThread().getName() + ' finished'); } catch (InterruptedException e) { e.printStackTrace(); } } } Çıkış: WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished
CountDownLatch hakkında gerçekler: - Yapıcısına bir int ileterek bir CountDownLatch nesnesi oluşturmak (count) aslında bir etkinlik için davet edilen tarafların (iş parçacıklarının) sayısıdır.
- İşlemeyi başlatmak için diğer iş parçacıklarına bağımlı olan iş parçacığı, diğer tüm iş parçacıkları geri sayım çağrısı yapana kadar bekler. Wait()'ta bekleyen tüm iş parçacıkları, geri sayım sıfıra ulaştığında birlikte ilerler.
- countDown() yöntemi, count == 0 olana kadar count ve wait() yöntemi bloklarını azaltır