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 Methode await() 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 weiter

Beispiel

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();