[자바 병렬 프로그래밍 실전] 독서노트(1): 폐쇄
3086 단어 Java 동시 프로그래밍
폐쇄(Latch): 종료 상태가 될 때까지 스레드의 진행을 지연시키는 동기화 도구 클래스입니다.그 작용은 한 개의 문에 해당한다. 이 문이 열리기 전에 모든 라인이 문 앞에 막히고 문이 열리면 모든 라인이 통과할 수 있다.또한 문(폐쇄)의 상태는 일회성(울타리는 제어)으로 문이 열리면 다시 닫을 수 없다.폐쇄는 어떤 활동이 다른 활동이 끝난 후에야 계속 실행될 수 있도록 확보하는 데 쓸 수 있다.
CountDownLatch는java입니다.util.concurrent 패키지는 다음과 같은 API와 함께 폐쇄의 구현에 대해 설명합니다.
public CountDownLatch(int count)
//현재 스레드를 잠금 메모리가 0까지 카운트다운되기 전까지 기다립니다. 스레드가 중단되지 않는 한
public void await() throws InterruptedException
//현재 스레드가 잠금 메모리에서 0까지 카운트다운되기 전에 스레드가 중단되거나 지정한 대기 시간을 초과하지 않는 한 계속 기다립니다.
public boolean await(long timeout, TimeUnit unit) throws InterruptedException
//카운트다운
public void countDown()
//현재 카운트 반환
public long getCount()
위 코드(JCIP5-5 + 메모 및 main():
/**
* TestHarness Using CountDownLatch for starting and stopping threads in timing
* tests
*
* @author Brian Goetz and Tim Peierls
* @author Modified by alchimie
*/
public class TestHarness {
public long timeTasks(int nThreads, final Runnable task)
throws InterruptedException {
//
final CountDownLatch startGate = new CountDownLatch(1);
//
final CountDownLatch endGate = new CountDownLatch(nThreads);
for (int i = 0; i < nThreads; i++) {
Thread t = new Thread() {
public void run() {
try {
System.out.println(" "
+ Thread.currentThread().getName() + " ");
//
startGate.await();
try {
task.run();
} finally {
endGate.countDown();
}
} catch (InterruptedException ignored) {
}
}
};
t.start();
}
long start = System.nanoTime();
//
Thread.sleep(100);
startGate.countDown();
System.out.println(" " + Thread.currentThread().getName() + " ");
//
endGate.await();
System.out.println(" " + Thread.currentThread().getName() + " ");
long end = System.nanoTime();
return end - start;
}
public static void main(String args[]) {
TestHarness th = new TestHarness();
try {
long time = th.timeTasks(5, new Thread(new Runnable() {
public void run() {
System.out.println(" " + Thread.currentThread().getName()
+ " ");
}
}));
System.out.println(" " + time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
실행 결과:
스레드 Thread-1 실행 대기
스레드 Thread-4 실행 대기
스레드 Thread-3 실행 대기
스레드 Thread-2 실행 대기
스레드 Thread-5 실행 대기
스레드main 대기
스레드 Thread-1 실행 완료
Thread-5 스레드 실행 완료
Thread-2 스레드 실행 완료
Thread-3 스레드 실행 완료
Thread-4 스레드 실행 완료
스레드main 실행
통계 시간 100455504
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
countdowlatch와cyclicbarrier의 용법 및 차이한 임무가 아래로 내려가려고 하지만 다른 임무가 끝난 후에야 계속 아래로 내려갈 수 있다.만약 우리가 계속 실행하고자 하는 이 임무는 CountDownLatch 대상의await () 방법을 사용하고, 다른 임무는 자...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.