Notice
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
- Serialization
- 알기쉬운 알고리즘
- Stack
- 윤성우 열혈자료구조
- 이것이 자바다
- datastructure
- Selection Sorting
- insertion sort
- C 언어 코딩 도장
- R
- JSON
- list 컬렉션
- s
- 윤성우의 열혈 자료구조
- stream
- coding test
- ㅅ
- Algorithm
- 이스케이프 문자
- buffer
- C programming
- Graph
- 혼자 공부하는 C언어
- 메모리구조
Archives
- Today
- Total
Engineering Note
[Java] 동시성 제어테스트를 위한 멀티쓰레드 코드 흐름 파악하기 본문
Programming Language/Java
[Java] 동시성 제어테스트를 위한 멀티쓰레드 코드 흐름 파악하기
Software Engineer Kim 2026. 1. 24. 23:11
동시성 제어테스트를 위한 멀티쓰레드 코드 흐름 파악하기
private int 주문_동시요청(int 요청개수) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(10);
CountDownLatch latch = new CountDownLatch(요청개수);
AtomicInteger exceptionCount = new AtomicInteger(0);
for (int i = 0; i < 요청개수; i++) {
executor.submit(() -> {
try {
orderService.placeOrder(userId, productId, 1);
} catch (OutOfStockException e) {
e.printStackTrace();
exceptionCount.incrementAndGet(); // 재고 부족 예외 카운트
} catch (Exception e) {
e.printStackTrace();
} finally {
latch.countDown();
}
});
}
latch.await();
executor.shutdown();
return exceptionCount.get();
}
Main Thread
│
├─► submit() → Worker1 생성 (작업 던짐)
├─► submit() → Worker2 생성 (작업 던짐)
├─► submit() → Worker3 생성 (작업 던짐)
├─► submit() → Worker4 생성 (작업 던짐)
├─► submit() → Worker5 생성 (작업 던짐)
│
├─► latch.await() ← 여기서 멈춤
│ │
│ │ Worker들이 각자 placeOrder() 실행 중...
│ │ 완료될 때마다 countDown() 호출
│ │
│ └─► 카운터 0 되면 해제
│
├─► shutdown()
└─► return
주요 클래스 요약
| 클래스 | 패키지 | 용도 |
| ExecutorService | java.util.concurrent | 스레드 풀 관리 |
| CountDownLatch | java.util.concurrent | 동기화 (완료 대기) |
| AtomicInteger | java.util.concurrent.atomic | Thread-safe 카운터 |
'Programming Language > Java' 카테고리의 다른 글
| [Java] 문자열은 얕은 복사(참조 변수 할당)로 참조해도 괜찮은 이유 (0) | 2026.01.15 |
|---|---|
| [Java] 깊은복사와 얕은복사 그리고 방어적복사 (0) | 2026.01.13 |
| [Java] Optional()에서 반환타입에서 .get()이 안좋은 이유와 예외처리를 하는 이유 (0) | 2026.01.09 |
| [Java] default 접근제어자와 테스트코드 패키지 (0) | 2026.01.08 |
| [Java] 동일성(Identity)과 동등성(Equality) (0) | 2025.12.23 |
Comments