Sammelpunkte

public class Sammelpunkt {
    private int anzahl = 0;
    private int threadAwait;
    private Object object;
    private int i = 0;

    public Sammelpunkt(int anzahl, Object ob) {
        this.anzahl = anzahl;
        this.threadAwait = anzahl;
        this.object = ob;
    }

    public void warten() throws InterruptedException {
        synchronized (object) {
            while (i + 1 < threadAwait) {
                i++;
                if (i >= 3) {
                    System.err.println(Thread.currentThread().getName() + " Weiterarbeiten " + i);
                    i = 0;
                } else {
                    System.out.println(Thread.currentThread().getName() + " Wartet");

                }
                object.wait();
            }
            object.notifyAll();

        }
    }
}

class Main3 {
    static int ANZAHL_Thread = 4;

    public static void main(String[] args) throws InterruptedException {
        Object ob = new Object();
        Sammelpunkt sammelpunkt = new Sammelpunkt(ANZAHL_Thread, ob);
        System.out.println("Trigger");

        Worker worker = new Worker(sammelpunkt);

        Thread[] threads = new Thread[ANZAHL_Thread];
        for (int i = 0; i < threads.length; i++) {
            threads[i] = new Thread(worker);
            threads[i].start();
        }
        Thread.sleep(2500);
        for (int i = 0; i < threads.length; i++) {
            //   threads[i].interrupt();
        }

        try {
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException ex) {
        }

    }
}

class Worker implements Runnable {

    Sammelpunkt sammelpunkt;

    Worker(Sammelpunkt sammelpunkt) {
        this.sammelpunkt = sammelpunkt;
    }

    @Override
    public void run() {
        try {
            Thread.sleep(1000);
            sammelpunkt.warten();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}
Hallo:   Ich möchte  solche Ausgabe haben.
Ruft der N-te Threads die Methode auf, werden alle am Sammelpunkt wartenden Threads deblockiert und alle Threads können weiterarbeiten. Das Treffen der N Threads an Sammelpunkten soll sich zyklisch wiederholen können.

Ich brauche eure Unterstutzung, Vielen Dank im Voraus

z.B.
Thread-2 wartet
thread-1 wartet
thread-3 wartet
thread-4 weiterarbeiten

Thread-4 wartet
Thread-0 wartet
thread-3 wartet
thread-1 wartet
thread-2 weiterarbeiten

Thread-2 wartet
Thread-4 wartet
thread-1 wartet
thread-3 wartet
thread-0 weiterarbeiten

Hört sich nach einer Aufgabe für CountdownLatch an: https://www.baeldung.com/java-countdown-latch

Nein, einCountDownLatch kann man nicht zurücksetzen. Das dürfte ein Fall für eine CyclicBarrier sein: CyclicBarrier (Java SE 17 & JDK 17)