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 | 31 |
Tags
- 클라우드 네이티브 자바
- decorator 패턴
- spring microservice
- devops
- 마이크로서비스
- 클라우드 네이티브
- MSA
- cloud native java
- Kotlin
- nGrinder
- Spring
- 머신러닝
- Algorithm
- 쿠버네티스
- Semaphore
- kubernetes
- 헬름
- CRD
- java
- Stress test
- Microservice
- cloud native
- 익명클래스
- 동기화
- Adapter 패턴
- 자바
- 코틀린
- ingress
- MySQL
- ansible
Archives
- Today
- Total
카샤의 만개시기
동기화 클래스 2편 - CountDownLatch 본문
백그라운드로 스레드가 돌아가고 있는 상황에서 해당 스레드가 종료 되기를 기다려야 하는 상황이 있을때 Thread 클래스의 join()
함수를 이용하면 됩니다.
그렇지만 하나가 아닌 여러 스레드들이 종료되기를 기다려야 하는 상황이 발생된다면 CountDownLatch를 고려할 수 있습니다.
private static final int THREAD_CNT = 10;
private CountDownLatch lacth = new CountDownLatch(THREAD_CNT);
public class SleepThread implements Runnable {
private int id = 0;
private static Random random = new Random(System.currentTimeMillis());
public SleepThread(int id) {
this.id = id;
}
@Override
public void run() {
System.out.println("Thread(" + id + ") : Start.");
int delay = random.nextInt(1001) + 1000; // 1 ~ 2초
try {
System.out.println("Thread(" + id + ") : Sleep " + delay + "ms");
Thread.sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread(" + id + ") : End.");
lacth.countDown(); // latch count -1
}
}
public static void main(String[] args) {
for(int i = 0; i <= THREAD_CNT; i++) {
new Thread(new SleepThread(i)).start();
}
try {
// lacth 의 카운트가 0이 될 때 까지 대기.
lacth.await();
// 아래 코드는 만약 3초 동안 latch 의 카운트가 0 되지 않는다면 wait 상태를 해제한다.
//lacth.await(3000, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
결과
Thread(1) : Start.
Thread(1) : Sleep 1114ms
Thread(2) : Start.
Thread(0) : Start.
Thread(0) : Sleep 1222ms
Thread(2) : Sleep 1023ms
Thread(5) : Start.
Thread(4) : Start.
Thread(4) : Sleep 1332ms
Thread(5) : Sleep 1678ms
Thread(3) : Start.
Thread(3) : Sleep 1499ms
Thread(6) : Start.
Thread(6) : Sleep 1721ms
Thread(7) : Start.
Thread(8) : Start.
Thread(7) : Sleep 1004ms
Thread(8) : Sleep 1722ms
Thread(9) : Start.
Thread(9) : Sleep 1676ms
Thread(7) : End.
Thread(1) : End.
Thread(2) : End.
Thread(0) : End.
Thread(3) : End.
Thread(4) : End.
Thread(8) : End.
Thread(5) : End.
Thread(9) : End.
Thread(6) : End.
NEXT
'Java > POJO' 카테고리의 다른 글
동기화 클래스 4편 - Exchanger (0) | 2019.07.03 |
---|---|
동기화 클래스 3편 - CyclicBarrier (0) | 2019.07.03 |
동기화 클래스 1편 - 세마포어(Semaphore) (0) | 2019.07.03 |
Java의 동기화 (atomic, volatile, synchronized) (0) | 2019.07.03 |
OSGI에서 Jigsaw로 모듈 시스템 (0) | 2019.07.01 |
Comments