Wie wird CountDownLatch in Java Multithreading verwendet?

Kann mir jemand helfen, was Java verstehtCountDownLatch ist und wann man es benutzt?

Ich habe keine genaue Vorstellung davon, wie dieses Programm funktioniert. Soweit ich weiß, beginnen alle drei Threads auf einmal und jeder Thread ruft nach 3000 ms CountDownLatch auf. Der Countdown wird also nacheinander verringert. Nachdem der Latch auf Null gesetzt wurde, gibt das Programm "Completed" aus. Vielleicht ist die Art und Weise, wie ich es verstanden habe, falsch.

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.");
    }

}

Antworten auf die Frage(11)

Ihre Antwort auf die Frage