Count arrivals down on a checkpoint latch and report whether it has opened.

countdown latch A `CountDownLatch` starts at a fixed count and opens when enough workers have arrived, so its remaining count is a clear coordination checkpoint.

Latch Checkpoint Coordination Report

arrivals
LatchCheckpointCoordinationReport.java
Replay: real traced execution (multi-file project)
import java.util.concurrent.CountDownLatch;

public class LatchCheckpointCoordinationReport {
    public static void main(String[] args) {
        int arrivals = 2;
        CountDownLatch latch = new CountDownLatch(3);

        for (int i = 0; i < arrivals; i++) {
            latch.countDown();
        }

        long remaining = latch.getCount();
        String status = remaining == 0 ? "open" : remaining <= 1 ? "ready" : "wait";

        System.out.println("arrivals=" + arrivals + " remaining=" + remaining + " status=" + status);
    }
}
import java.util.concurrent.CountDownLatch;

public class LatchCheckpointCoordinationReport {
    public static void main(String[] args) {
        int arrivals = 0;
        CountDownLatch latch = new CountDownLatch(3);

        for (int i = 0; i < arrivals; i++) {
            latch.countDown();
        }

        long remaining = latch.getCount();
        String status = remaining == 0 ? "open" : remaining <= 1 ? "ready" : "wait";

        System.out.println("arrivals=" + arrivals + " remaining=" + remaining + " status=" + status);
    }
}
import java.util.concurrent.CountDownLatch;

public class LatchCheckpointCoordinationReport {
    public static void main(String[] args) {
        int arrivals = 3;
        CountDownLatch latch = new CountDownLatch(3);

        for (int i = 0; i < arrivals; i++) {
            latch.countDown();
        }

        long remaining = latch.getCount();
        String status = remaining == 0 ? "open" : remaining <= 1 ? "ready" : "wait";

        System.out.println("arrivals=" + arrivals + " remaining=" + remaining + " status=" + status);
    }
}
  1. arrivals ← 2, latch ← ⟨CountDownLatch A⟩[Count = 3]

    3public class LatchCheckpointCoordinationReport {4    public static void main(String[] args) {5        int arrivals→ 2 = 2;  //@arrivals=0, 36        CountDownLatch latch→ ⟨CountDownLatch A⟩[Count = 3] = new CountDownLatch(3);
  2. for (int i = 0; i < arrivals; i++)

    pass 1 of 2
    8for (int i0 = 0; i < arrivals2; i++) {9    latch.countDown();10}
  3. for (int i = 0; i < arrivals; i++)

    pass 2 of 2
    8for (int i1 = 0; i < arrivals2; i++) {9    latch.countDown();10}
  4. remaining ← 1, status ← ready

    12    long remaining→ 1 = latch.getCount();13    String status→ ready = remaining1 == 0 ? "open" : remaining <= 1 ? "ready" : "wait";1415    System.out.println("arrivals=" + arrivals2 + " remaining=" + remaining1 + " status=" + statusready);16}
    outputarrivals=2 remaining=1 status=ready
  1. arrivals ← 0, latch ← ⟨CountDownLatch A⟩[Count = 3], remaining ← 3

    3public class LatchCheckpointCoordinationReport {4    public static void main(String[] args) {5        int arrivals→ 0 = 0;6        CountDownLatch latch→ ⟨CountDownLatch A⟩[Count = 3] = new CountDownLatch(3);78        for (int i = 0; i < arrivals; i++) {9            latch.countDown();10        }1112        long remaining→ 3 = latch.getCount();13        String status→ wait = remaining3 == 0 ? "open" : remaining <= 1 ? "ready" : "wait";1415        System.out.println("arrivals=" + arrivals0 + " remaining=" + remaining3 + " status=" + statuswait);16    }
    outputarrivals=0 remaining=3 status=wait
  1. arrivals ← 3, latch ← ⟨CountDownLatch A⟩[Count = 3]

    3public class LatchCheckpointCoordinationReport {4    public static void main(String[] args) {5        int arrivals→ 3 = 3;6        CountDownLatch latch→ ⟨CountDownLatch A⟩[Count = 3] = new CountDownLatch(3);
  2. for (int i = 0; i < arrivals; i++)

    pass 1 of 3
    8for (int i0 = 0; i < arrivals3; i++) {9    latch.countDown();10}
    All 3 passes — pass 1 is the card above
    passi
    10
    21
    32
  3. remaining ← 0, status ← open

    12    long remaining→ 0 = latch.getCount();13    String status→ open = remaining0 == 0 ? "open" : remaining <= 1 ? "ready" : "wait";1415    System.out.println("arrivals=" + arrivals3 + " remaining=" + remaining0 + " status=" + statusopen);16}
    outputarrivals=3 remaining=0 status=open