파이문

CountDownLatch vs CyclicBarrier 본문

Java

CountDownLatch vs CyclicBarrier

민Z 2020. 9. 24. 19:29

CountDownLatch vs CyclicBarrier

  • CyclicBarrier 는 여러 쓰레드가 서로를 기다리고 CountDownLatch 는 하나 또는 다수의 쓰레드가 작업이 완료될 때 까지 기다린다.
  • CyclicBarrier 에 모든 쓰레드가 도달하면 값이 초기화 되고 CountDownLatch 는 초기화 되지 않는다. 따라서 CountDownLatch 는 재사용 불가능하다.

CountDownLatch

쓰레드를 N개 실행했을 때, 일정 개수의 쓰레드가 모두 끝날 때 까지 기다려야지만 다음으로 진행할 수 있거나 다른 쓰레드를 실행시킬 수 있는 경우 사용한다.

 

예를 들면 메인 쓰레드에서 5개의 쓰레드를 실행 시키고, CountDownLatch 값을 3으로 설정해본다고 하자. 각 쓰레드가 종료되는 시점에 countDown() 을 호출한다. 그러면 3개의 쓰레드가 종료 될 때 메인 쓰레드가 다시 시작된다.

CountDownLatch countDownLatch = new CountDownLatch(3);
  IntStream.range(0, 5)
    .mapToObj(i -> new Worker(i, countDownLatch))
    .map(Thread::new)
    .forEach(Thread::start);

countDownLatch.await(); // 실행되는 쓰레드 (여기선 메인이라고 하자) 가 다른 쓰레드에서 countDown 이 3번 호출 될 때 까지 기다린다.

CyclicBarrier

CyclicBarrier 모든 스레드들이 Barrier Point 에 도착하는 것을 보장해야 할 때 (쓰레드가 동시에 어떤 작업을 실행해야 하는 것이 필요할 때, 약간 느낌상 synchronized 한 작업이 있어야 할 때?) 사용한다.

참고

'Java' 카테고리의 다른 글

멀티쓰레드에서 싱글톤 클래스 사용 예제  (0) 2020.10.08
JDK 14 톺아보기  (0) 2020.10.07
Mockito 를 사용하는 예제  (0) 2020.09.25
멀티쓰레드 환경에서 캐시 구현하기  (0) 2020.06.27
Comments