Ai đó có thể giúp tôi hiểu Java CountDownLatch
là gì và khi nào sử dụng nó không?
Tôi không có một ý tưởng rất rõ ràng về cách thức hoạt động của chương trình này. Theo tôi hiểu, cả ba luồng bắt đầu cùng một lúc và mỗi luồng sẽ gọi CountDownLatch sau 3000ms. Vì vậy, đếm ngược sẽ giảm từng cái một. Sau khi chốt trở thành số không, chương trình sẽ in "Đã hoàn thành". Có lẽ cách tôi hiểu là không chính xác.
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.");
}
}