La copia del código es la siguiente:
paquete com.yao;
import java.util.random;
import java.util.concurrent.cyclicbarrier;
/**
* CyclicBarrier es similar a CountdownLatch, y también es un contador.
* La diferencia es que el número de ciclicbarrier se llama cyclicbarrier.await () para ingresar al número de espera.
* Cuando el número de subprocesos alcanza el número especificado en la hora inicial de CyclicBarrier, todos los hilos que ingresan al estado de espera se despiertan y continúan.
* Cyclicbarrier, al igual que su nombre, puede considerarse como un obstáculo.
* Se deben llegar todos los hilos antes de que puedan pasar este obstáculo.
* CyclicBarrier también puede tener un parámetro ejecutable al principio.
* Después de alcanzar el número de ciclicbarrier, todos los demás hilos se ejecutan antes de despertarlos.
*/
clase pública cyclicbarriertest {
Public static class componentThread implementos runnables {
Barrera cíclica; // contador
int id; // ID de componente
int [] array; // matriz de datos
// Método de construcción
Public ComponentThread (CyclicBarrier Barrier, int [] Array, int id) {
this.barrier = barrera;
this.id = id;
this.array = array;
}
public void run () {
intentar {
array [id] = new Random (). NextInt (100);
System.out.println ("componente" + id + "genera:" + array [id]);
// espera la barrera aquí
System.out.println ("componente" + id + "dormir ...");
barrera.await ();
System.out.println ("componente" + id + "Awakened ...");
// Calcule los valores actuales y posteriores en la matriz de datos
int result = array [id] + array [id + 1];
System.out.println ("componente" + id + "resultado:" + resultado);
} Catch (Exception Ex) {
}
}
}
/**
* Prueba el uso de CyclicBarrier
*/
public static void testCyclicBarrier () {
final int [] array = new int [3];
CyclicBarrier Barrier = New CyclicBarrier (2, New Runnable () {
// ejecutar cuando todos los hilos llegan a la barrera
public void run () {
System.out.println ("TestCyclicBarrier Run ...");
matriz [2] = matriz [0] + matriz [1];
}
});
// Inicie el hilo
nuevo hilo (nuevo ComponentThread (Barrera, Array, 0)). Start ();
nuevo hilo (nuevo ComponentThread (Barrera, Array, 1)). Start ();
}
public static void main (string [] args) {
Cyclicbarriertest.testcyclicbarrier ();
}
}