A cópia do código é a seguinte:
pacote com.yao;
importar java.util.concurrent.countdownlatch;
importar java.util.concurrent.executorService;
importar java.util.concurrent.executores;
/**
* Countdownlatch é um contador, que tem um número inicial,
* O fio que espera por este balcão deve esperar até que o balcão conte zero antes de continuar.
*/
classe pública CountdownLatchTest {
/**
* O tópico que inicializa o componente
*/
classe estática pública ComponentThread implementa Runnable {
// Contador
Countdownlatch Latch;
// ID do componente
int id;
// Método de construção
public ComponentThread (contagem de casca de contagem, int id) {
this.latch = latch;
this.id = id;
}
public void run () {
// inicialize o componente
System.out.println ("Inicializando o componente" + id);
tentar {
Thread.sleep (500 * id);
} catch (interruptedException e) {
}
System.out.println ("componente" + id + "inicializado!");
// decrem o balcão por um
latch.CountDown ();
}
}
/**
* Inicie o servidor
*/
public static void startServer () lança exceção {
System.out.println ("Servidor está começando.");
// Inicialize um Countdownlatch com um valor inicial de 3
Countdownlatch Latch = new Countdownlatch (3);
// Inicie 3 tópicos para iniciar 3 componentes, respectivamente
ExecutorService Service = executores.newcachedthreadpool ();
Service.submit (novo componenteThread (Latch, 1));
Service.submit (novo componenteThread (Latch, 2));
Service.submit (novo componenteThread (Latch, 3));
Service.shutdown ();
// aguardando a inicialização de 3 componentes a serem concluídos
latch.await ();
// Quando todos os três componentes necessários são concluídos, o servidor pode continuar
System.out.println ("Servidor está atualizado!");
}
public static void main (string [] args) lança exceção {
CountDownLatchTest.startServer ();
}
}