본문 바로가기
  • Adillete
【Java】

CompletableFuture() 비동기 작업을 다루는 도구 설명서

by 아딜렛 2026. 3. 16.

CompletableFuture()

나중에 결과가 나오는 비동기 작업

future : 결과를 나중에 받는다.

Completion: 결과가 나오면 이어서 다른 작업을 실행할수 있다.

 

특징

1. 직접 완료시킬수 있음

future.complete("결과")

일반 future는 결과를 기다린다면 결과를 직접 넣을수 있음

2. 여러 스레드가 동시에 완료하려고 해도 하나만 성공한다.

race condition을 방지한다.

3. 작업 이어붙이기가 가능하다.

결과가 나오면 자동으로 다음 작업이 실행된다.

4. async vs non-async

thenApply() : 현재 작업을 끝낸 스레드가 이어서 실행할 수 있음

thenApplyAsync(): 다른 스레드에서 실행됨

 

5. 기본 스레드 풀

ForkJoinPool.commonPool(): 별도 설정 안하면 여기서 돌아감

근데 이거 몰빵하면 병목생김

6. cancel: 실패 처리

cancel은 예외로 끝난것처럼 처리됨

7. 예외 처리방식

.get() 예외발생시 executionException으로 감싸서 던짐

.join() 예외 발생했을때 바로 CompletionException 던짐

 

출처:

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html