어떤 개념일까?

CountDownLatch

한번쓰고 버리는 카운터 게이트이다. 하나 이상의 스레드가, 다른 스레드들에서 진행되는 일련의 작업이 끝날 때까지 기다리게 해주는 동기화 도구이다.

  • 정수 카운트 N으로 초기화한다.
  • countDown()이 호출될 때마다 카운트가 1씩 줄고, 0이 되면 await()으로 막혀있던 스레드가 풀린다.
  • 재사용이 불가능하다.
  • 역할의 비대징 - 카운트를 내리는쪽과 기다리는 쪽이 분리되어 있다.

CyclicBarrier

재사용 가능한 집결지 베리어이다. 고정된 수의 스레드가 서로를 공통 지점에서 기다렸다가, 전원이 도착하면 함께 축발하게 해주는 도구이다.

  • 참가자 수를 N으로 초기화한다.
  • 각 스레드가 await()를 호출하며 집결하고, N번째가 도착하는 순간 전원이 동시에 해제된다.
  • 재사용이 가능하다.
  • 역할이 대칭 - 모든 참가자가 await()으로 한번씩 호출된다.

어떤 문제를 해결하려고 나왔을까? 왜 사용 할까?


어떻게 동작하나?


언제 쓰고, 언제 안 쓰나?

쓸 때:

CountDownLatch

  • 일회성 이벤트
  • N개 작업의 완료를 한 스레드가 모아서 기다릴 때
  • 워커들을 한번에 출발시키는 스타트 게이트

CyclicBarrier

  • 단계를 반복하는 병렬 알고리즘
  • 동기화 라운드가 여러번 필요할 때
  • 단계 사이에 콜백이 필요할 때
  • 도착 보장이 필요한 균등 동시 출발

남에게 설명한다면 어떻게 설명할 것인가?


추가 궁금한 질문들