코드 사본은 다음과 같습니다.
패키지 com.yao;
java.util.concurrent.countdownlatch import;
import java.util.concurrent.executorservice;
java.util.concurrent.executors import;
/**
* Countdownlatch는 초기 번호가있는 카운터입니다.
*이 카운터를 기다리는 실은 계속되기 전에 카운터가 0으로 계산 될 때까지 기다려야합니다.
*/
공개 클래스 CountdownLatchTest {
/**
* 구성 요소를 초기화하는 스레드
*/
공개 정적 클래스 componentshread는 runnable {
// 카운터
CountdownLatch 래치;
// 구성 요소 ID
int id;
// 구성 방법
public componentthread (CountdownLatch Latch, int id) {
this.latch = 래치;
this.id = id;
}
public void run () {
// 구성 요소를 초기화합니다
System.out.println ( "구성 요소 초기화" + ID);
노력하다 {
Thread.sleep (500 * ID);
} catch (InterruptedException e) {
}
System.out.println ( "구성 요소" + id + "초기화!");
// 카운터를 하나씩 줄입니다
latch.countdown ();
}
}
/**
* 서버를 시작하십시오
*/
public static void startyerver ()는 예외 {
System.out.println ( "서버가 시작 중입니다.");
// 초기 값이 3 인 CountdownLatch를 초기화합니다
CountdownLatch Latch = New CountdownLatch (3);
// 3 개의 스레드를 시작하여 각각 3 개의 구성 요소를 시작합니다
ExecutorService Service = Executor.NewCachedThreadPool ();
Service.Submit (New ComponentThread (Latch, 1));
Service.Submit (New ComponentThread (Latch, 2));
Service.Submit (New ComponentThread (Latch, 3));
service.shutdown ();
// 3 개의 구성 요소의 초기화가 완료되기를 기다리고 있습니다.
latch.await ();
// 필요한 세 가지 구성 요소가 완료되면 서버는 계속 될 수 있습니다.
System.out.println ( "서버는 UP!");
}
public static void main (string [] args)은 예외 {
CountdownLatchTest.StartServer ();
}
}