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
- Microservice
- nGrinder
- spring microservice
- Kotlin
- 자바
- MSA
- decorator 패턴
- CRD
- java
- Adapter 패턴
- Stress test
- 헬름
- MySQL
- 머신러닝
- 동기화
- 익명클래스
- Spring
- kubernetes
- cloud native
- ingress
- cloud native java
- devops
- Algorithm
- 클라우드 네이티브
- 마이크로서비스
- 쿠버네티스
- 클라우드 네이티브 자바
- 코틀린
- ansible
- Semaphore
Archives
- Today
- Total
카샤의 만개시기
동기화 클래스 3편 - CyclicBarrier 본문
실행중인 쓰레드 내부 원하는 지점에서 대기를 걸어주고 CyclicBarrier 생성자의 파라미터로 넘겨준 값 만큼 await()
을 호출하면 대기하고 있던 쓰레드들의 대기를 풀어주는 동작을 할 수 있습니다.
private static final int THREAD_CNT = 5;
private CyclicBarrier cyclicBarrier = new CyclicBarrier(THREAD_CNT);
public class SleepThread implements Runnable {
private int id = 0;
private 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);
System.out.println("Thread(" + id + ") : End Sleep"); } catch (InterruptedException e) {
e.printStackTrace();
}
try {
// CyclicBarrier 생성자의 파라미터로 넘겨준 값 만큼 await를 호출한다면
// barrier를 통해 대기하고 있는 모든 쓰레드의 wait 상태가 종료됩니다.
cyclicBarrier.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
System.out.println("Thread(" + id + ") : End.");
}
public static void main(String[] args) {
for(int i = 0; i < THREAD_CNT; ++i) {
new Thread(new SleepThread(i)).start();
}
}
결과
Thread(0) : Start.
Thread(2) : Start.
Thread(2) : Sleep 1229ms
Thread(0) : Sleep 1132ms
Thread(1) : Start.
Thread(1) : Sleep 1784ms
Thread(4) : Start.
Thread(3) : Start.
Thread(4) : Sleep 1912ms
Thread(3) : Sleep 1199ms
Thread(4) : End Sleep
Thread(2) : End Sleep
Thread(3) : End Sleep
Thread(1) : End Sleep
Thread(0) : End Sleep
Thread(4) : End.
Thread(3) : End.
Thread(1) : End.
Thread(2) : End.
Thread(0) : End.
'Java > POJO' 카테고리의 다른 글
동기화 클래스 5편 - Executors, FutureTask, Future (0) | 2019.07.03 |
---|---|
동기화 클래스 4편 - Exchanger (0) | 2019.07.03 |
동기화 클래스 2편 - CountDownLatch (0) | 2019.07.03 |
동기화 클래스 1편 - 세마포어(Semaphore) (0) | 2019.07.03 |
Java의 동기화 (atomic, volatile, synchronized) (0) | 2019.07.03 |
Comments