A cópia do código é a seguinte:
pacote com.yao;
importar java.util.random;
importar java.util.concurrent.cyclicBarrier;
/**
* CyclicBarrier é semelhante ao Countdownlatch e também é um contador.
* A diferença é que o número de CyclicBarrier é chamado CyclicBarrier.await () para inserir o número de espera.
* Quando o número de threads atinge o número especificado no momento inicial do ciclicBarrier, todos os threads que entram no estado de espera são despertados e continuam.
* CyclicBarrier, assim como seu nome, pode ser considerado um obstáculo.
* Todos os tópicos devem ser alcançados antes que possam passar esse obstáculo juntos.
* CyclicBarrier também pode ter um parâmetro executável no início.
* Depois que o número de CyclicBarrier chegar, todos os outros threads são executados antes de serem despertados.
*/
classe pública CyclicBarrierTest {
classe estática pública ComponentThread implementa Runnable {
Barreira de ciclicbarrier; // contador
int id; // ID do componente
int [] array; // matriz de dados
// Método de construção
public ComponentThread (barreira de CyclicBarrier, int [] Array, int id) {
this.Barrier = barreira;
this.id = id;
this.array = matriz;
}
public void run () {
tentar {
Array [id] = new Random (). NextInt (100);
System.out.println ("componente" + id + "gera:" + array [id]);
// Aguarde a barreira aqui
System.out.println ("componente" + id + "sono ...");
barrier.await ();
System.out.println ("componente" + id + "despertado ...");
// Calcule os valores atuais e subsequentes na matriz de dados
int resultado = array [id] + matriz [id + 1];
System.out.println ("componente" + id + "resultado:" + resultado);
} catch (Exceção ex) {
}
}
}
/**
* Teste o uso do CyclicBarrier
*/
public static void testCyclicBarrier () {
final int [] array = new int [3];
CiclicBarrier Barrier = New CyclicBarrier (2, new Runnable () {
// executar quando todos os tópicos chegam à barreira
public void run () {
System.out.println ("TestCyclicBarrier Run ...");
Array [2] = Array [0] + Array [1];
}
});
// Inicie o tópico
novo thread (novo componentethread (barreira, matriz, 0)). start ();
novo thread (novo componentethread (barreira, matriz, 1)). start ();
}
public static void main (string [] args) {
CyclicBarrierTest.testcyclicBarrier ();
}
}