JAVA · 비동기/동시성
CountDownLatch와 CyclicBarrier
스레드 동기화 도구인 CountDownLatch와 CyclicBarrier를 비교합니다.
비동기/동시성고급CountDownLatchCyclicBarrier동기화배리어
핵심 설명
스레드 동기화 도구인 CountDownLatch와 CyclicBarrier를 비교합니다.
Java code
import java.util.concurrent.*;
public class SyncTools {
public static void main(String[] args) throws Exception {
// CountDownLatch — 일회용, N개 이벤트 대기
int workerCount = 3;
CountDownLatch latch = new CountDownLatch(workerCount);
for (int i = 0; i < workerCount; i++) {
final int id = i;
new Thread(() -> {
System.out.println("Worker " + id + " 완료");
latch.countDown(); // 카운트 감소
}).start();
}
latch.await(); // 0이 될 때까지 대기
System.out.println("모든 Worker 완료!");
// CyclicBarrier — 재사용 가능, 모두 도달 시 진행
int parties = 3;
CyclicBarrier barrier = new CyclicBarrier(parties,
() -> System.out.println("== 모두 도착! 다음 단계 =="));
for (int i = 0; i < parties; i++) {
final int id = i;
new Thread(() -> {
try {
System.out.println("Runner " + id + " 1단계");
barrier.await(); // 모두 대기
System.out.println("Runner " + id + " 2단계");
barrier.await(); // 재사용!
} catch (Exception e) { e.printStackTrace(); }
}).start();
}
Thread.sleep(1000); // 결과 출력 대기
}
}학습 팁
CountDownLatch는 일회용(카운트 리셋 불가), CyclicBarrier는 재사용 가능합니다. 단계별 병렬 처리에는 Barrier가 적합합니다.
주의할 점
CyclicBarrier에서 한 스레드가 예외로 중단되면 다른 스레드도 BrokenBarrierException을 받습니다. 예외 처리를 반드시 하세요.
자주 묻는 질문
CountDownLatch와 CyclicBarrier란 무엇인가요?
스레드 동기화 도구인 CountDownLatch 와 CyclicBarrier 를 비교합니다.
CountDownLatch와 CyclicBarrier 학습 시 주의할 점은 무엇인가요?
CyclicBarrier 에서 한 스레드가 예외로 중단되면 다른 스레드도 BrokenBarrierException 을 받습니다. 예외 처리를 반드시 하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.