¿Cómo se usa CountDownLatch en Java Multithreading?

Alguien me puede ayudar a entender lo que JavaCountDownLatch es y cuando usarlo?

No tengo una idea muy clara de cómo funciona este programa. Como entiendo, los tres subprocesos comienzan a la vez y cada subproceso llamará CountDownLatch después de 3000 ms. Así que la cuenta regresiva disminuirá una por una. Después de que el cierre se ponga en cero, el programa imprime "Completado". Tal vez la forma en que entendí es incorrecta.

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

class Processor implements Runnable {
    private CountDownLatch latch;

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

    public void run() {
        System.out.println("Started.");

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

        latch.countDown();
    }
}

// ------------------------------------------------ -----

public class App {

    public static void main(String[] args) {

        CountDownLatch latch = new CountDownLatch(3); // coundown from 3 to 0

        ExecutorService executor = Executors.newFixedThreadPool(3); // 3 Threads in pool

        for(int i=0; i < 3; i++) {
            executor.submit(new Processor(latch)); // ref to latch. each time call new Processes latch will count down by 1
        }

        try {
            latch.await();  // wait until latch counted down to 0
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("Completed.");
    }

}

Respuestas a la pregunta(11)

Su respuesta a la pregunta