La copie de code est la suivante:
Package com.yao;
import java.util.random;
import java.util.concurrent.cyclicbarrier;
/ **
* CyclicBarrier est similaire à CountdownLatch, et c'est aussi un compteur.
* La différence est que le nombre de barres cycliques est appelé cyclicbarrier.Await () pour entrer le numéro d'attente.
* Lorsque le nombre de threads atteint le nombre spécifié au moment initial de CyclicBarrier, tous les threads entrant dans l'état d'attente sont éveillés et continuent.
* Cyclicbarrier, tout comme son nom, peut être considéré comme un obstacle.
* Tous les fils doivent être arrivés avant de pouvoir passer cet obstacle ensemble.
* CyclicBarrier peut également avoir un paramètre runnable au début.
* Une fois le nombre de barrages cycliques, tous les autres threads sont exécutés avant d'être éveillés.
* /
classe publique Cyclicbarriestrest {
Classe statique publique ComponentThread implémente Runnable {
Barrière de barrière cyclique; // compteur
int id; // id de composant
Int [] Array; // Array Data
// Construire la méthode
Public ComponentThread (CyclicBarrier Barrier, int [] Array, int id) {
this.barrier = barrière;
this.id = id;
this.array = array;
}
public void run () {
essayer {
Array [id] = new Random (). NextInt (100);
System.out.println ("composant" + id + "génère:" + array [id]);
// attendez la barrière ici
System.out.println ("composant" + id + "Sleep ...");
barrière.Await ();
System.out.println ("composant" + id + "Awakened ...");
// Calculez les valeurs actuelles et suivantes dans le tableau de données
Int result = array [id] + array [id + 1];
System.out.println ("composant" + id + "Résultat:" + résultat);
} catch (exception ex) {
}
}
}
/ **
* Testez l'utilisation de Cyclicbarrier
* /
public static void testCyclicBarrier () {
final int [] array = new int [3];
CyclicBarrier Barrier = new CyclicBarrier (2, new Runnable () {
// Exécuter lorsque tous les threads arrivent à la barrière
public void run () {
System.out.println ("TestCyclicBarrier Run ...");
Array [2] = Array [0] + Array [1];
}
});
// Démarrez le fil
Nouveau thread (nouveau composantthread (barrière, array, 0)). start ();
Nouveau thread (nouveau composantthread (barrière, array, 1)). start ();
}
public static void main (String [] args) {
Cyclicbarriestrest.testCyclicBarrier ();
}
}