Eine CyclicBarrier synchronisiert in Java einen bestimmten Zeitpunkt von mehreren Threads.
Funktionsweise
await()blockiert alle Aufrufer solange, bis die im Konstruktor angegebene Anzahl an parties die Methodeawait()aufgerufen haben- Der Thread, der als letztes die Methode
await()aufgerufen hat, gibt dadurch die Blockierung der anderen Threads mit frei
// Definition
CyclicBarrier barrier = new CyclicBarrier(n);
// Innerhalb der Threads
barrier.await()
// Wird await zum n-ten Mal aufgerufen, löst sich das await und es geht weiterBeispiel
CyclicBarrier barriere = new CyclicBarrier(2); // "passive" Barriere
// aktiver Thread
new Thread(new Runnable() {
// Code vor...
System.out.println("A vor Barriere");
barriere.await(); // alle wartenden Threads teilen selbes Barriere-Objekt!
System.out.println("A nach Barriere");
// ...Code nach zeitlicher Synchronisation
}).start();
// aktiver Thread
new Thread(new Runnable() {
// Code vor...
System.out.println("B vor Barriere");
barriere.await(); // alle wartenden Threads teilen selbes Barriere-Objekt!
System.out.println("B nach Barriere");
// ...Code nach zeitlicher Synchronisation
}).start();