티스토리 뷰
배경
CompletableFuture 에서 whenComplete 랑 whenCompleteAsync 의 차이가 어떤건지 궁금해서 기록
whenComplete: Returns a new CompletionStage with the same result or exception as this stage, that executes the given action when this stage completes.
whenCompleteAsync
Returns a new CompletionStage with the same result or exception as this stage, that executes the given action using this stage's default asynchronous execution facility when this stage completes.
테스트 - whenComplete
@Test
public void test_supplyAsync_whenComplete() throws InterruptedException {
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
System.out.println("on supplyAsync: " + Thread.currentThread().getName());
return "ret";
}).whenComplete((s, throwable) -> {
System.out.println("on whenComplete: " + Thread.currentThread().getName());
System.out.println(s);
});
for (int i = 0; i < 100; i++) {
Thread.sleep(1L);
}
System.out.println("outside: " + Thread.currentThread().getName());
}
on supplyAsync: ForkJoinPool.commonPool-worker-3
on whenComplete: ForkJoinPool.commonPool-worker-3
ret
outside: main
테스트 - whenCompleteAsync
@Test
public void test_supplyAsync_with_whenCompleteAsync() throws InterruptedException {
CompletableFuture future = CompletableFuture.supplyAsync(() -> {
System.out.println("on supplyAsync: " + Thread.currentThread().getName());
return "ret";
}).whenCompleteAsync((s, throwable) -> {
System.out.println("on whenCompleteAsync: " + Thread.currentThread().getName());
System.out.println(s);
});
for (int i = 0; i < 100; i++) {
Thread.sleep(1L);
}
System.out.println("outside: " + Thread.currentThread().getName());
}
on supplyAsync: ForkJoinPool.commonPool-worker-3
on whenCompleteAsync: ForkJoinPool.commonPool-worker-5
ret
outside: main
이해한 결론
publish 를 async 로 한 뒤에 (결과를) subscribe 할 때에 비동기로 처리하기 위함으로 추정된다.
기타
reactor에서 publishOn 은 이해했는데 subscribeOn 은 한동안 이해를 못한채로 남아있었다.
같은 맥락이라면 왜 있는지 짐작이 갈 것 같다.
'개발관련 > 뻘팁-작업노트' 카테고리의 다른 글
jackson 분석 - 작업 노트 (0) | 2021.08.08 |
---|---|
JHipster (맛보기 + 소견) (0) | 2021.05.11 |
java - java.util.regex.PatternSyntaxException: Dangling meta character '*' near index 0 (0) | 2021.05.10 |
reactor - groupedFlux 의 키 개수 제한 (0) | 2021.04.29 |
accesslog awk (0) | 2021.04.04 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Kafka
- Generic
- 말의품격
- completablefuture
- pecs
- PatternSyntaxException
- Java
- percolate
- 기술센싱
- jhipster
- flush
- meta character
- Spring
- WebSocket
- elasticsearch
- 기술사이트
- 만들면서 배우는 클린 아키텍처
- Dangling
- 클린 아키텍처
- opensearch
- 에픽테토스
- COMMIT
- 개발자
- 사기꾼증후군
- fsync
- 전설로떠나는월가의영웅
- 기술블로그
- Async
- kafka 2.8.0
- AWS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함