Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- gradle
- boj
- Java
- 문제풀이
- programmers
- codewars
- leetcode
- Linux
- 자바
- 스칼라
- zookeeper
- dynamic programming
- go
- 튜토리얼
- 동적프로그래밍
- OOM
- 파이썬
- golang
- DP
- scala
- 주키퍼
- Go언어
- 리눅스
- redis
- 코드워
- 알고리즘
- 프로그래머스
- HBase
- Python
- docker
Archives
- Today
- Total
파이문
CountDownLatch vs CyclicBarrier 본문
728x90
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