Skip to content

Commit bd7d759

Browse files
committed
lecture
1 parent 9dae1d8 commit bd7d759

File tree

3 files changed

+68
-187
lines changed

3 files changed

+68
-187
lines changed

src/main/java/io/concurrency/chapter11/exam09/ExceptionallyExample.java

+17-70
Original file line numberDiff line numberDiff line change
@@ -6,81 +6,28 @@
66
public class ExceptionallyExample {
77
public static void main(String[] args) {
88

9-
ServiceA sa = new ServiceA();
10-
ServiceB sb = new ServiceB();
11-
ServiceC sc = new ServiceC();
129

13-
CompletableFuture<Integer> futureA = sa.fetchAsyncDataA();
14-
CompletableFuture<Integer> futureB = sb.fetchAsyncDataB();
15-
CompletableFuture<Integer> futureC = sc.fetchAsyncDataC();
16-
17-
CompletableFuture<Integer> cf = CompletableFuture.allOf(futureA, futureB, futureC)
18-
.thenApplyAsync(v -> {
19-
int resultA = futureA.join();
20-
int resultB = futureB.join();
21-
int resultC = futureC.join();
22-
return resultA + resultB + resultC;
10+
CompletableFuture<Object> cf = CompletableFuture.supplyAsync(() -> {
11+
try {
12+
Thread.sleep(500);
13+
throw new RuntimeException("error");
14+
15+
} catch (InterruptedException e) {
16+
Thread.currentThread().interrupt();
17+
}
18+
return 10;
19+
})
20+
.thenApply(r -> r + 20)
21+
.exceptionally(ex -> {
22+
System.err.println("최종 예외 처리: " + ex.getMessage());
23+
return -1;
24+
}).thenApply(r -> {
25+
throw new IllegalArgumentException("error");
2326
}).exceptionally(ex -> {
2427
System.err.println("최종 예외 처리: " + ex.getMessage());
25-
return -1; // 최종 예외 처리 및 기본값 반환
28+
return -1;
2629
});
2730

2831
System.out.println("result: " + cf.join());
2932
}
30-
31-
static class ServiceA {
32-
33-
public CompletableFuture<Integer> fetchAsyncDataA() {
34-
// 비동기 작업 시뮬레이션
35-
return CompletableFuture.supplyAsync(() -> {
36-
try {
37-
Thread.sleep(500);
38-
throw new RuntimeException("error");
39-
} catch (InterruptedException e) {
40-
Thread.currentThread().interrupt();
41-
}
42-
return 10;
43-
}).exceptionally(ex -> {
44-
System.err.println("ServiceA 예외 처리: " + ex.getMessage());
45-
return -1; // 예외 발생 시 기본값 반환
46-
});
47-
}
48-
}
49-
50-
static class ServiceB {
51-
52-
public CompletableFuture<Integer> fetchAsyncDataB() {
53-
// 비동기 작업 시뮬레이션
54-
return CompletableFuture.supplyAsync(() -> {
55-
try {
56-
Thread.sleep(400);
57-
} catch (InterruptedException e) {
58-
Thread.currentThread().interrupt();
59-
}
60-
return 20;
61-
}).exceptionally(ex -> {
62-
System.err.println("ServiceB 예외 처리: " + ex.getMessage());
63-
return -1; // 예외 발생 시 기본값 반환
64-
});
65-
}
66-
}
67-
68-
static class ServiceC {
69-
70-
public CompletableFuture<Integer> fetchAsyncDataC() {
71-
// 비동기 작업 시뮬레이션
72-
return CompletableFuture.supplyAsync(() -> {
73-
try {
74-
Thread.sleep(300);
75-
throw new RuntimeException("error");
76-
} catch (InterruptedException e) {
77-
Thread.currentThread().interrupt();
78-
}
79-
return 30;
80-
}).exceptionally(ex -> {
81-
System.err.println("ServiceC 예외 처리: " + ex.getMessage());
82-
return -1; // 예외 발생 시 기본값 반환
83-
});
84-
}
85-
}
8633
}

src/main/java/io/concurrency/chapter11/exam09/HandleExample.java

+31-55
Original file line numberDiff line numberDiff line change
@@ -5,73 +5,49 @@
55
public class HandleExample {
66
public static void main(String[] args) {
77

8-
ServiceA sa = new ServiceA();
9-
ServiceB sb = new ServiceB();
10-
11-
CompletableFuture<Integer> futureA = sa.fetchAsyncDataA()
12-
.handle((resultA, exA) -> {
13-
if (exA != null) {
14-
System.err.println("ServiceA 예외 처리: " + exA.getMessage());
8+
CompletableFuture<Integer> cf1 = CompletableFuture.supplyAsync(() -> {
9+
try {
10+
Thread.sleep(500);
11+
} catch (InterruptedException e) {
12+
Thread.currentThread().interrupt();
13+
}
14+
return 10;
15+
})
16+
.handle((r, e) -> {
17+
if (e != null) {
18+
System.err.println("비동기 예외 처리 1: " + e.getMessage());
1519
return -1; // 예외 발생 시 기본값 반환
1620
}
17-
return resultA;
21+
return r;
1822
});
1923

20-
CompletableFuture<Integer> futureB = sb.fetchAsyncDataB()
21-
.handle((resultB, exB) -> {
22-
if (exB != null) {
23-
System.err.println("ServiceB 예외 처리: " + exB.getMessage());
24+
CompletableFuture<Integer> cf2 = CompletableFuture.supplyAsync(() -> {
25+
try {
26+
Thread.sleep(500);
27+
// throw new RuntimeException("error");
28+
29+
} catch (InterruptedException e) {
30+
Thread.currentThread().interrupt();
31+
}
32+
return 20;
33+
})
34+
.handle((r, e) -> {
35+
if (e != null) {
36+
System.err.println("비동기 예외 처리 2: " + e.getMessage());
2437
return -1; // 예외 발생 시 기본값 반환
2538
}
26-
return resultB;
39+
return r;
2740
});
2841

29-
CompletableFuture<Integer> combinedResult = futureA.thenCombine(futureB, (resultA, resultB) -> {
30-
if (resultA == -1 || resultB == -1) {
42+
CompletableFuture<Integer> cf3 = cf1.thenCombine(cf2, (r1, r2) -> {
43+
if (r1 == -1 || r2 == -1) {
3144
// 둘 중 하나라도 예외가 발생하면 예외 처리
3245
return -1;
3346
}
34-
// 두 결과를 조합하여 복잡한 작업 수행 (예시로 간단한 덧셈)
35-
return resultA + resultB;
47+
// 두 결과를 조합하여 복잡한 작업 수행
48+
return r1 + r2;
3649
});
3750

38-
System.out.println("result: " + combinedResult.join());
39-
}
40-
41-
static class ServiceA {
42-
43-
public CompletableFuture<Integer> fetchAsyncDataA() {
44-
// 비동기 작업 시뮬레이션
45-
return CompletableFuture.supplyAsync(() -> {
46-
try {
47-
Thread.sleep(500);
48-
throw new RuntimeException("error");
49-
} catch (InterruptedException e) {
50-
Thread.currentThread().interrupt();
51-
}
52-
return 10;
53-
}).exceptionally(ex -> {
54-
System.err.println("ServiceA 예외 처리: " + ex.getMessage());
55-
return -1; // 예외 발생 시 기본값 반환
56-
});
57-
}
58-
}
59-
60-
static class ServiceB {
61-
62-
public CompletableFuture<Integer> fetchAsyncDataB() {
63-
// 비동기 작업 시뮬레이션
64-
return CompletableFuture.supplyAsync(() -> {
65-
try {
66-
Thread.sleep(400);
67-
} catch (InterruptedException e) {
68-
Thread.currentThread().interrupt();
69-
}
70-
return 20;
71-
}).exceptionally(ex -> {
72-
System.err.println("ServiceB 예외 처리: " + ex.getMessage());
73-
return -1; // 예외 발생 시 기본값 반환
74-
});
75-
}
51+
System.out.println("result: " + cf3.join());
7652
}
7753
}

src/main/java/io/concurrency/chapter11/exam09/WhenCompleteExample.java

+20-62
Original file line numberDiff line numberDiff line change
@@ -6,74 +6,32 @@
66
public class WhenCompleteExample {
77
public static void main(String[] args) {
88

9-
ServiceA sa = new ServiceA();
10-
ServiceB sb = new ServiceB();
9+
CompletableFuture<Integer> cf = CompletableFuture.supplyAsync(() -> {
10+
try {
11+
Thread.sleep(500);
12+
throw new RuntimeException("error");
13+
} catch (InterruptedException e) {
14+
Thread.currentThread().interrupt();
15+
}
16+
return 10;
17+
})
18+
.whenComplete((r, e) -> {
19+
if (e != null) {
20+
System.err.println("예외 발생: " + e.getMessage());
21+
// 예외 처리
22+
} else {
23+
// 결과 처리
24+
System.out.println("결과: " + r);
25+
}
26+
});
1127

12-
CompletableFuture<Integer> futureA = sa.fetchAsyncDataA();
13-
CompletableFuture<Integer> futureB = sb.fetchAsyncDataB();
14-
15-
CompletableFuture<Integer> combinedResult = futureA.thenCombine(futureB, (resultA, resultB) -> {
16-
if (resultA == -1 || resultB == -1) {
17-
// 둘 중 하나라도 예외가 발생 하면 예외 처리
18-
throw new RuntimeException("error");
19-
}
20-
// 두 결과를 조합 하여 작업 수행
21-
return resultA + resultB;
22-
});
23-
24-
CompletableFuture<Integer> cf = combinedResult.whenComplete((result, ex) -> {
25-
if (ex != null) {
26-
System.err.println("예외 처리: " + ex.getMessage());
27-
// 예외 처리
28-
} else {
29-
// 결과 처리
30-
System.out.println("결과: " + result);
31-
}
32-
});
3328
try {
3429
cf.get();
3530
} catch (InterruptedException ex) {
36-
System.out.println("예외 발생 = " + ex.getMessage());
31+
System.out.println("예외 처리: " + ex.getMessage());
3732

3833
} catch (ExecutionException ex) {
39-
System.out.println("예외 발생 = " + ex.getMessage());
40-
}
41-
}
42-
43-
static class ServiceA {
44-
45-
public CompletableFuture<Integer> fetchAsyncDataA() {
46-
// 비동기 작업 시뮬레이션
47-
return CompletableFuture.supplyAsync(() -> {
48-
try {
49-
Thread.sleep(500);
50-
throw new RuntimeException("error");
51-
} catch (InterruptedException e) {
52-
Thread.currentThread().interrupt();
53-
}
54-
return 10;
55-
}).exceptionally(ex -> {
56-
System.err.println("ServiceA 예외 처리: " + ex.getMessage());
57-
return -1; // 예외 발생 시 기본값 반환
58-
});
59-
}
60-
}
61-
62-
static class ServiceB {
63-
64-
public CompletableFuture<Integer> fetchAsyncDataB() {
65-
// 비동기 작업 시뮬레이션
66-
return CompletableFuture.supplyAsync(() -> {
67-
try {
68-
Thread.sleep(400);
69-
} catch (InterruptedException e) {
70-
Thread.currentThread().interrupt();
71-
}
72-
return 20;
73-
}).exceptionally(ex -> {
74-
System.err.println("ServiceB 예외 처리: " + ex.getMessage());
75-
return -1; // 예외 발생 시 기본값 반환
76-
});
34+
System.out.println("예외 처리: " + ex.getMessage());
7735
}
7836
}
7937
}

0 commit comments

Comments
 (0)