자바 병렬 프로 그래 밍 테마(8)---(JUC)인 스 턴 스 설명 CountDownlatch
3867 단어 자바juc병렬 프로 그래 밍CountDownLatch
Countdown Latch 의 구조 함 수 는 현재 이 카운터 의 개수 인 정 수 를 매개 변수 로 받 습 니 다.
public CountDownLatch(int count)
Countdown Latch 는 다른 스 레 드 에서 실행 중인 작업 을 완료 하기 전에 하나 이상 의 스 레 드 를 기다 릴 수 있 도록 동기 화 보조 클래스 입 니 다.Countdown Latch 가 주어진 개수 로 초기 화 되 었 습 니 다.현재 계수 가 0 일 때 까지 await 방법 을 사용 하여 차단 합 니 다.countDown()방법 을 호출 한 후에 모든 기다 리 는 스 레 드 가 풀 리 고 후속 호출 await 는 즉시 돌아 갑 니 다.이것 은 일회 성 현상 입 니 다.-계 수 는 리 셋 할 수 없습니다.리 셋 계수 가 필요 하 다 면 Cyclic Barrier 를 사용 하 는 것 을 고려 해 Cyclic Barrier 의 계수 기 를 리 셋 해서 사용 할 수 있 기 때문에 순환 의 barrier 라 고 불 린 다.주요 방법:
// , 。
void await()
// , 。
boolean await(long timeout, TimeUnit unit)
// , , 。
void countDown()
// 。
long getCount()
우 리 는 예 를 하나 보 자.
public class TestCountDownLatch {
private static final int RUNNER_NUMBER = 5; //
private static final Random RANDOM = new Random();
public static void main(String[] args) {
// , 5 , 5
CountDownLatch readyLatch = new CountDownLatch(RUNNER_NUMBER);
// , , 1
CountDownLatch startLatch = new CountDownLatch(1);
for (int i = 0; i < RUNNER_NUMBER; i++) {
Thread t = new Thread(new Runner((i + 1) + " ", readyLatch, startLatch));
t.start();
}
try {
readyLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
startLatch.countDown();
System.out.println(" : , ...");
}
static class Runner implements Runnable {
private CountDownLatch readyLatch;
private CountDownLatch startLatch;
private String name;
public Runner(String name, CountDownLatch readyLatch, CountDownLatch startLatch) {
this.name = name;
this.readyLatch = readyLatch;
this.startLatch = startLatch;
}
public void run() {
int readyTime = RANDOM.nextInt(1000);
System.out.println(name + ": " + readyTime + " .");
try {
Thread.sleep(readyTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + ": .");
readyLatch.countDown();
try {
startLatch.await(); //
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + ": ...");
}
}
}
인쇄 결과:1 번 선수:준비 할 시간 이 547 초 필요 합 니 다.
2 번 선수:준비 할 시간 이 281 초 필요 합 니 다.
4 번 선수:563 초 동안 준비 해 야 합 니 다.
5 번 선수:916 초 동안 준비 할 시간 이 필요 합 니 다.
3 번 선수:준비 할 시간 이 461 초 필요 합 니 다.
2 번 선수:저 는 이미 준 비 를 마 쳤 습 니 다.
3 번 선수:저 는 이미 준 비 를 마 쳤 습 니 다.
1 번 선수:저 는 이미 준 비 를 마 쳤 습 니 다.
4 번 선수:저 는 이미 준 비 를 마 쳤 습 니 다.
5 번 선수:저 는 이미 준 비 를 마 쳤 습 니 다.
심판:모든 선수 들 준비 완료,시작...
3 번 선수:달리기...
2 번 선수:달리기...
1 번 선수:달리기...
4 번 선수:달리기...
5 번 선수:달리기...
Process finished with exit code 0
메모:계수 기 는 0 보다 커 야 합 니 다.0 일 뿐 계수 기 는 0 입 니 다.await 방법 을 호출 할 때 현재 스 레 드 를 막 지 않 습 니 다.
이상 은 자바 병행 프로 그래 밍 테마(8)-(JUC)인 스 턴 스 설명 CountDownlatch 의 상세 한 내용 입 니 다.자바 jc CountDownlatch 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.