Skip to content

Commit 9dae1d8

Browse files
committed
lecture
1 parent 848517b commit 9dae1d8

File tree

2 files changed

+56
-31
lines changed

2 files changed

+56
-31
lines changed

src/main/java/io/concurrency/chapter11/exam08/AllOfExample.java

+34-18
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,48 @@
33
import java.util.concurrent.CompletableFuture;
44

55
public class AllOfExample {
6-
public static void main(String[] args) {
6+
public static void main(String[] args) throws InterruptedException {
77

88
ServiceA sa = new ServiceA();
99
ServiceB sb = new ServiceB();
1010
ServiceC sc = new ServiceC();
1111

12-
CompletableFuture<Integer> futureA = sa.fetchAsyncDataA();
13-
CompletableFuture<Integer> futureB = sb.fetchAsyncDataB();
14-
CompletableFuture<Integer> futureC = sc.fetchAsyncDataC();
12+
CompletableFuture<Integer> cf1 = sa.getData1();
13+
CompletableFuture<Integer> cf2 = sb.getData2();
14+
CompletableFuture<Integer> cf3 = sc.getData3();
1515

16-
CompletableFuture<Integer> cf = CompletableFuture.allOf(futureA, futureB, futureC)
17-
.thenApplyAsync(v -> {
18-
int resultA = futureA.join();
19-
int resultB = futureB.join();
20-
int resultC = futureC.join();
21-
return resultA + resultB + resultC;
22-
});
16+
long started = System.currentTimeMillis();
17+
CompletableFuture<Void> voidCf = CompletableFuture.allOf(cf1, cf2, cf3);
18+
CompletableFuture<Integer> finalCf = voidCf.thenApply(v -> {
2319

24-
System.out.println("result: " + cf.join());
20+
int result1 = cf1.join();
21+
int result2 = cf2.join();
22+
int result3 = cf3.join();
23+
24+
System.out.println("result1 = " + result1);
25+
System.out.println("result2 = " + result2);
26+
System.out.println("result3 = " + result3);
27+
28+
return result1 + result2 + result3;
29+
30+
});
31+
// Thread.sleep(2000);
32+
finalCf.join();
33+
System.out.println("최종 소요 시간: " + (System.currentTimeMillis() - started));
34+
35+
// System.out.println("최종결과: " + voidCf);
36+
System.out.println("최종결과: " + finalCf.join());
37+
System.out.println("메인 스레드 종료");
2538
}
2639

2740
static class ServiceA {
2841

29-
public CompletableFuture<Integer> fetchAsyncDataA() {
42+
public CompletableFuture<Integer> getData1() {
3043
// 비동기 작업 시뮬레이션
3144
return CompletableFuture.supplyAsync(() -> {
3245
try {
33-
Thread.sleep(500);
46+
Thread.sleep(1000);
47+
System.out.println("비동기 작업 시작 1");
3448
} catch (InterruptedException e) {
3549
Thread.currentThread().interrupt();
3650
}
@@ -41,11 +55,12 @@ public CompletableFuture<Integer> fetchAsyncDataA() {
4155

4256
static class ServiceB {
4357

44-
public CompletableFuture<Integer> fetchAsyncDataB() {
58+
public CompletableFuture<Integer> getData2() {
4559
// 비동기 작업 시뮬레이션
4660
return CompletableFuture.supplyAsync(() -> {
4761
try {
48-
Thread.sleep(400);
62+
Thread.sleep(2000);
63+
System.out.println("비동기 작업 시작 2");
4964
} catch (InterruptedException e) {
5065
Thread.currentThread().interrupt();
5166
}
@@ -56,11 +71,12 @@ public CompletableFuture<Integer> fetchAsyncDataB() {
5671

5772
static class ServiceC {
5873

59-
public CompletableFuture<Integer> fetchAsyncDataC() {
74+
public CompletableFuture<Integer> getData3() {
6075
// 비동기 작업 시뮬레이션
6176
return CompletableFuture.supplyAsync(() -> {
6277
try {
63-
Thread.sleep(300);
78+
Thread.sleep(1000);
79+
System.out.println("비동기 작업 시작 3");
6480
} catch (InterruptedException e) {
6581
Thread.currentThread().interrupt();
6682
}

src/main/java/io/concurrency/chapter11/exam08/AnyOfExample.java

+22-13
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,32 @@ public static void main(String[] args) {
99
ServiceB sb = new ServiceB();
1010
ServiceC sc = new ServiceC();
1111

12-
CompletableFuture<Integer> futureA = sa.fetchAsyncDataA();
13-
CompletableFuture<Integer> futureB = sb.fetchAsyncDataB();
14-
CompletableFuture<Integer> futureC = sc.fetchAsyncDataC();
12+
CompletableFuture<Integer> cf1 = sa.getData1();
13+
CompletableFuture<Integer> cf2 = sb.getData2();
14+
CompletableFuture<Integer> cf3 = sc.getData3();
1515

16-
CompletableFuture<Integer> cf = CompletableFuture.anyOf(futureA, futureB, futureC)
17-
.thenApplyAsync(result -> {
18-
return (int)result * 10;
19-
});
16+
long started = System.currentTimeMillis();
17+
CompletableFuture<Object> finalCf = CompletableFuture.anyOf(cf1, cf2, cf3);
18+
finalCf.thenApply(result -> {
19+
return (int)result * 10;
2020

21-
System.out.println("result: " + cf.join());
21+
});
22+
// Thread.sleep(2000);
23+
finalCf.join();
24+
System.out.println("최종 소요 시간: " + (System.currentTimeMillis() - started));
25+
26+
System.out.println("최종결과: " + finalCf.join());
27+
System.out.println("메인 스레드 종료");
2228
}
2329

2430
static class ServiceA {
2531

26-
public CompletableFuture<Integer> fetchAsyncDataA() {
32+
public CompletableFuture<Integer> getData1() {
2733
// 비동기 작업 시뮬레이션
2834
return CompletableFuture.supplyAsync(() -> {
2935
try {
3036
Thread.sleep(500);
37+
System.out.println("비동기 작업 시작 1");
3138
} catch (InterruptedException e) {
3239
Thread.currentThread().interrupt();
3340
}
@@ -38,11 +45,12 @@ public CompletableFuture<Integer> fetchAsyncDataA() {
3845

3946
static class ServiceB {
4047

41-
public CompletableFuture<Integer> fetchAsyncDataB() {
48+
public CompletableFuture<Integer> getData2() {
4249
// 비동기 작업 시뮬레이션
4350
return CompletableFuture.supplyAsync(() -> {
4451
try {
45-
Thread.sleep(400);
52+
Thread.sleep(2000);
53+
System.out.println("비동기 작업 시작 2");
4654
} catch (InterruptedException e) {
4755
Thread.currentThread().interrupt();
4856
}
@@ -53,11 +61,12 @@ public CompletableFuture<Integer> fetchAsyncDataB() {
5361

5462
static class ServiceC {
5563

56-
public CompletableFuture<Integer> fetchAsyncDataC() {
64+
public CompletableFuture<Integer> getData3() {
5765
// 비동기 작업 시뮬레이션
5866
return CompletableFuture.supplyAsync(() -> {
5967
try {
60-
Thread.sleep(300);
68+
Thread.sleep(1000);
69+
System.out.println("비동기 작업 시작 3");
6170
} catch (InterruptedException e) {
6271
Thread.currentThread().interrupt();
6372
}

0 commit comments

Comments
 (0)