티스토리 뷰
병행(Concurrency)과 병렬(Parallelism)의 차이
- 병행은 여러 작업을 번갈아가며 실행해 마치 동시에 여러 작업을 동시에 처리하듯 보이지만, 실제로는 한 번에 오직 한 작업만 실행한다 (CPU가 1개여도 가능)
- 병렬은 여러 작업을 동시에 처리한다 (CPU가 여러개 있어야 가능)
java.util.concurrent 패키지
- 병행(concurreny) 프로그래밍에 유용하게 사용할 수 있는 유틸리티 모음
- 자바의 concurrent 패키지는 병행 애플리케이션에 유용한 다양한 툴을 제공한다
- BlockingQueue, Callable, ConccurentMap, Executor, ExecutorService, Future, ...
CountDownLatch
- 하나 이상의 스레드가 다른 스레드들의 작업이 끝날 때까지 대기하도록 만들 때 사용
- 카운터가 0이 될 때까지 await()를 호출한 스레드들이 블로킹
- 재사용할 수 있는 인스턴스는 아니고, 0이 되면 더 이상 유효하지 않음
- 재사용이 필요한 경우 CyclicBarrier 사용
| CountDownLatch | CyclicBarrier | |
| 재사용 | 불가 (1회성) | 가능 (자동 리셋) |
| 용도 | 한쪽이 다른 쪽을 기다림 | 모든 스레드가 서로를 기다림 |
| 카운트 감소 주체 | 임의의 스레드가 호출 가능 | 배리어에 도착한 스레드 자신 |

