Copie o código do código da seguinte forma:
classe pública TestCyclicBarrier {
final estático privado int THREAD_NUM = 5;
classe estática pública WorkerThread implementa Runnable{
Barreira CyclicBarrier;
public WorkerThread(CyclicBarrier b){
esta.barreira = b;
}
@Substituir
execução nula pública() {
// TODO stub de método gerado automaticamente
tentar{
System.out.println("Trabalhador em espera");
//Threads esperam aqui até que todos os threads alcancem a barreira.
barreira.await();
System.out.println("ID:"+Thread.currentThread().getId()+" Funcionando");
}catch(Exceção e){
e.printStackTrace();
}
}
}
/**
* @param argumentos
*/
public static void main(String[] args) {
// TODO stub de método gerado automaticamente
CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {
//Executado quando todas as threads alcançam a barreira
@Substituir
execução void pública() {
// TODO stub de método gerado automaticamente
System.out.println("Barreira Interna");
}
});
for(int i=0;i<THREAD_NUM;i++){
novo Thread(new WorkerThread(cb)).start();
}
}
}
/*
Aqui está a saída:
O trabalhador está esperando
O trabalhador está esperando
O trabalhador está esperando
O trabalhador está esperando
O trabalhador está esperando
Barreira Interna
ID:12 Trabalhando
ID:8 Trabalhando
ID:11 Trabalhando
ID:9 Trabalhando
ID:10 Trabalhando
*/
1. Especifique um número quando CyclicBarrier for inicializado e calcule o número de threads que chamam CyclicBarrier.await() para esperar. Quando o número de threads atinge esse número, todos os threads que entraram no estado de espera são despertados e continuam.
2. CyclicBarrier, como o próprio nome indica, pode ser considerado um obstáculo. Todos os threads devem estar presentes antes que possam passar por esse obstáculo juntos.
3. CyclicBarrier também pode receber um parâmetro Runnable inicialmente. Esta tarefa Runnable será executada após o número de CyclicBarriers ser atingido e antes que todos os outros threads sejam despertados.