La copia del código es la siguiente:
paquete com.yao;
import java.util.concurrent.countdownLatch;
import java.util.concurrent.executorservice;
import java.util.concurrent.executors;
/**
* CountdownLatch es un contador, que tiene un número inicial,
* El hilo que espera este contador debe esperar hasta que el contador cuente a cero antes de continuar.
*/
clase pública CountdownLatchTest {
/**
* El hilo que inicializa el componente
*/
Public static class componentThread implementos runnables {
// Encimera
CountdownLatch Latch;
// ID de componente
int id;
// Método de construcción
Public ComponentThread (CountdownLatch Latch, int id) {
this.latch = Latch;
this.id = id;
}
public void run () {
// Inicializar el componente
System.out.println ("Inicialización del componente" + id);
intentar {
Thread.sleep (500 * id);
} capt (interruptedException e) {
}
System.out.println ("componente" + id + "inicializado!");
// disminuir el mostrador por uno
Latch.CountDown ();
}
}
/**
* Iniciar el servidor
*/
public static void startingerver () lanza la excepción {
System.out.println ("El servidor está comenzando");
// Inicializar un CountdownLatch con un valor inicial de 3
CountdownLatch Latch = new CountdownLatch (3);
// Inicie 3 hilos para iniciar 3 componentes respectivamente
EjecutorService Service = Ejecutors.NewCachedThreadPool ();
servicio.submit (nuevo ComponentThread (Latch, 1));
servicio.submit (nuevo ComponentThread (Latch, 2));
servicio.submit (nuevo ComponentThread (Latch, 3));
servicio.shutdown ();
// esperando que se completen la inicialización de 3 componentes
Latch.Await ();
// Cuando se completan todos los tres componentes requeridos, el servidor puede continuar
System.out.println ("¡El servidor está arriba!");
}
public static void main (string [] args) lanza la excepción {
CountdownLatchTest.StartServer ();
}
}