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