카운트 다운 카운터는 카운트 다운 Latch 오브젝트의 카운트 다운 메소드를 호출하고 카운터를 1만큼 빼고 0에 도달하면 모든 웨이터가 실행을 시작합니다.
java.util.concurrent.countdownlaatch
동기 보조 클래스는 다른 스레드에서 일련의 작업을 완료하기 전에 하나 이상의 스레드가 대기 할 수 있습니다. 주어진 수를 사용하여 CountdownLatch를 초기화하십시오. Countdown () 메소드가 호출되므로 현재 카운팅이 0에 도달하기 전에 Await 메소드가 차단되었습니다. 그 후, 모든 대기 스레드가 릴리스되며, 이후의 모든 후속 호출이 즉시 돌아옵니다. 이 현상은 카운팅을 재설정 할 수없는 한 번만 나타납니다. 카운트를 재설정 해야하는 경우 Cyclicbarrier 사용을 고려하십시오.
CountdownLatch는 많은 용도로 일반 동기화 도구입니다. COUNTING 1 COUNTOWNLATCH를 간단한 오프닝/잠금 예금자 또는 입구로 사용하십시오. COUNTDOWN () 스레드 호출을 호출하여 입구를 열기 전에 호출 호출이 입구에서 기다리고 있습니다. C COUNTDOWNLATCH의 N 이니셜을 사용하면 N 스레드가 완료되기 전에 대기하기 위해 스레드를 기다리거나 특정 작업 전에 기다릴 수 있습니다.
CountdownLatch의 유용한 기능 중 하나는 카운트 다운 메서드가 0으로 계산 될 때까지 카운트 다운 메소드를 계속하는 스레드가 필요하지 않으며 모든 스레드가 통과되기 전에 모든 스레드가 기다리는 것을 방지하는 것입니다.
예 : 여러 선수들이 심판 명령을 기다리고 있습니다 : 심판 및 기타 선수와 같은 모든 선수는 Qi Qi 이후 결과를 발표합니다.
com.ljq.test.thread java.util.countdownlaatch; .NewCachedThreadPool (); 심판은 결과를 발표했습니다. CountdownLatch CDANSWER = New CountdownLatch (3); raun () {try {system.out.println ( "스레드" + thread.currentthread (). + thread.currentthread ()는 명령을 수락했습니다. " +"응답 명령 처리 결과") ;;} Catch (E.PrintStackTrace ();}}; .random ()*100000); Command System.out.println ( "Thread" + Thread.currentThread (). getName () + "결과를 기다렸다"); 0 System.out.println의 모든 운동 선수 ( "Thread" + Thread.currentThread (). getName () + "모든 응답 결과를 받았다");} service.shutdown ();}};후면 결과 :
스레드 풀 스레드 -3은 명령 스레드 풀 -1- 스레드를 수락 할 준비를하고 있습니다. 결과 결과를 기다리는 명령은 결과 스레드 풀 스레드 -2를 기다리고 있습니다. 명령 처리 결과 스레드 풀 -1- 스레드 -2 명령 처리 결과에 대한 응답 스레드 풀 -1- 스레드 -1 응답 1 응답 처리 결과 스레드 메인은 모든 응답 결과를 받았습니다.