ЦоунтДовнЛатцх се користи да би се осигурало да задатак чека друге нити пре него што почне. Да бисмо разумели његову примену, размотримо сервер на коме главни задатак може да почне тек када се покрену све потребне услуге. Рад ЦоунтДовнЛатцх-а: Када креирамо објекат ЦоунтДовнЛатцх, наводимо број нити које треба да сачека да све такве нити обаве одбројавање позивањем ЦоунтДовнЛатцх.цоунтДовн() када су завршене или спремне за посао. Чим број достигне нулу, задатак чекања почиње да се покреће. Пример ЦоунтДовнЛатцх-а у ЈАВА: 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(); } } } Излаз: WORKER-1 finished WORKER-2 finished WORKER-3 finished WORKER-4 finished main has finished
Чињенице о ЦоунтДовнЛатцх-у: - Креирање објекта ЦоунтДовнЛатцх-а преношењем инт у његов конструктор (број) је заправо број позваних страна (нити) за догађај.
- Нит која зависи од других нити за почетак обраде чека док свака друга нит не позове одбројавање. Све нити које чекају на аваит() настављају заједно када одбројавање достигне нулу.
- цоунтДовн() метода смањује цоунт и аваит() метод блокира док цоунт == 0