Die Codekopie lautet wie folgt:
Paket com.yao;
import Java.util.random;
import Java.util.concurrent.cyclicbarrier;
/**
* CyclicBarrier ähnelt Countdownlatch und es ist auch ein Zähler.
* Der Unterschied besteht darin, dass die Anzahl der Cyclicbarrier Cyclicbarrier.ait () genannt wird, um die Wartenummer einzugeben.
* Wenn die Anzahl der Threads die zum Anfangszeit von Cyclicbarrier angegebene Zahl erreicht, werden alle Threads, die in den Wartezustand eintreten, geweckt und fortgesetzt.
* Cyclicbarrier kann, genau wie sein Name, als Hindernis angesehen werden.
* Alle Fäden müssen angekommen, bevor sie dieses Hindernis zusammen passieren können.
* CyclicBarrier kann zu Beginn auch einen laufbaren Parameter haben.
* Nachdem die Anzahl der Cyclicbarrier erreicht, werden alle anderen Themen ausgeführt, bevor sie geweckt werden.
*/
öffentliche Klasse cyclicbarrierest {
öffentliche statische Klassenkomponentthread implementiert Runnable {
Cyclicbarrier -Barriere; // Zähler
int id; // Komponenten -ID
int [] Array; // Datenarray
// Methode konstruieren
public componentthread (cyclicbarrier barriere, int [] array, int id) {
this.barrier = Barriere;
this.id = id;
this.Array = Array;
}
public void run () {
versuchen {
Array [id] = new random (). NextInt (100);
System.out.println ("Komponente" + id + "generiert:" + array [id]);
// hier auf Barriere warten
System.out.println ("Komponente" + ID + "Schlaf ...");
Barriere.aait ();
System.out.println ("Komponente" + id + "erwacht ...");
// Berechnen Sie die aktuellen und nachfolgenden Werte im Datenarray
int result = array [id] + array [id + 1];
System.out.println ("Komponente" + ID + "Ergebnis:" + Ergebnis);
} catch (Ausnahme ex) {
}
}
}
/**
* Testen Sie die Verwendung von Cyclicbarrier
*/
public static void testcyclicbarrier () {
endgültig int [] array = new int [3];
Cyclicbarrier Barriere = New Cyclicbarrier (2, New Runnable () {
// Führen Sie aus, wenn alle Themen zu einer Barriere kommen
public void run () {
System.out.println ("testcyclicBarrier run ...");
Array [2] = Array [0] + Array [1];
}
});
// den Thread starten
neuer Thread (neuer KomponentThread (Barriere, Array, 0)). start ();
neuer Thread (neuer KomponentThread (Barriere, Array, 1)). start ();
}
public static void main (String [] args) {
Cyclicbarrierest.TestCyclicbarrier ();
}
}