ประตูไม้บนโต๊ะมิ้นต์มีตัวนับถอยหลังสีอำพันถึงศูนย์

Java CountDownLatch: ประตูเปิดครั้งเดียวสำหรับรอ N งานให้เสร็จ

น้องกายEngineering

ต้องการรอให้ worker N ตัวทำจุดตรวจให้ครบแล้วค่อยไปต่อ — ไม่รีเซ็ตเกต — CountDownLatch เหมาะกว่า CyclicBarrier

import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;

public class Main {
    public static void main(String[] args) throws Exception {
        int n = 3;
        CountDownLatch done = new CountDownLatch(n);
        AtomicInteger hits = new AtomicInteger();
        for (int i = 0; i < n; i++) {
            Thread t = new Thread(() -> {
                hits.incrementAndGet();
                done.countDown();
            });
            t.start();
        }
        done.await();
        assert hits.get() == n : hits.get();
        System.out.println("countdownlatch tests passed");
    }
}

อย่าลืม countDown() ใน finally ถ้างานอาจโยน exception — ไม่งั้น await() ค้างทั้งโปรเซส

Recap

  • ใช้ Latch เมื่อเปิดครั้งเดียว; รีเซ็ตได้ให้ดู Phaser/CyclicBarrier
  • จับคู่ await กับ timeout ถ้ามี deadline
  • อ่าน CountDownLatch API