Moin,
also meine Aufgabe ist folgende:
Die Klasse Sammelpunkt kann zur Umsetzung von Sammelpunkten für mehrere Threads eingesetzt werden. Im Konstruktor wird dazu die Anzahl N an teilnehmenden Threads angegeben. Ruft ein Thread die Methode warten auf, wird er solange blockiert, bis diese Methode auch von den anderen Threads aufgerufen wurde. 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 wollte gern fragen, ob mein Code die Bedingungen erfüllt, wenn nicht, was soll ich dann noch machen.
Vielen Dank im Voraus.
also meine Aufgabe ist folgende:
Die Klasse Sammelpunkt kann zur Umsetzung von Sammelpunkten für mehrere Threads eingesetzt werden. Im Konstruktor wird dazu die Anzahl N an teilnehmenden Threads angegeben. Ruft ein Thread die Methode warten auf, wird er solange blockiert, bis diese Methode auch von den anderen Threads aufgerufen wurde. 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 wollte gern fragen, ob mein Code die Bedingungen erfüllt, wenn nicht, was soll ich dann noch machen.
Vielen Dank im Voraus.
Java:
public class Sammelpunkt extends CyclicBarrier {
public Sammelpunkt(int anzahl) {
super(anzahl);
}
public void warten() throws InterruptedException, BrokenBarrierException {
Thread.sleep(1000);
int await = this.await();
if (await == 0) {
System.out.println("############");
}
}
}
class Worker implements Runnable {
Sammelpunkt sammelpunkt;
public Worker(Sammelpunkt spammers) {
this.sammelpunkt = spammers;
}
@Override
public void run() {
System.out.println("1. " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
sammelpunkt.warten();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("2. " + Thread.currentThread().getName());
}
}
class Main {
public static void main(String[] args) {
Sammelpunkt sammelpunkt = new Sammelpunkt(3);
Worker worker = new Worker(sammelpunkt);
new Thread(worker, "Thread-1").start();
new Thread(worker, "Thread-2").start();
new Thread(worker, "Thread-3").start();
}
}