CompletableFuture
2022. 11. 22. 09:05ㆍBackEnd(Java)/Java
✅ 아래 내용들에 대해서 알아보자
- CompletableFutre?
- CompletableFutre 사용법
CompletableFuture
비동기 메서드에 대한 결괏값등 많은 연산을 제공해 주는 API이다. Java5에 Future가 추가되면서 비동기 작업에 대한 결괏값을 반환받을 수 있게 되었다.
하지만 Future는 다음과 같은 한계점이 있었다.
- 외부에서 완료시킬 수 없고, get의 타임아웃 설정으로만 완료 가능
- 블로킹 코드(get)를 통해서만 이후의 결과를 처리할 수 있음
- 여러 Future를 조합할 수 없음 ex) 회원 정보를 가져오고, 알림을 발송하는 등
- 여러 작업을 조합하거나 예외 처리할 수 없음
Future는 외부에서 작업을 완료시킬 수 없고, 작업 완료는 오직 get 호출 시에 타임아웃으로만 가능하다. 또한 비동기 작업의 응답에 추가 작업을 하려면 get을 호출해야 하는데, get은 블로킹 호출이므로 좋지 않다.
또한 여러 Future들을 조합할 수도 없으며, 예외가 발생한 경우에 이를 위한 예외처리도 불가능하다.
그래서 Java8에서는 이러한 문제를 모두 해결한 CompletableFuture가 등장하게 되었다.
CompletableFuture가 갖는 대표적인 작업
- 비동기 작업 실행
- 작업 콜백(thenApply, thenAccept, thenRun ..등)
- 작업 조합
- 예외 처리
예시코드를 같이보자
CompletableFuture<Integer> future;
for (int i = 0; i < 100; i++) {
int finalI = i;
future = CompletableFuture.supplyAsync(
() -> {
try {
return asyncTestService.asyncHello(finalI);
} catch (Exception e) {
System.out.println("이거는 숫자가 3이라서 터진겁니다!");
throw new RuntimeException(e);
}
}
);
boolean done = future.isDone();
if (done) {
System.out.println("future.get() = " + future.get());
}
}
반응형
'BackEnd(Java) > Java' 카테고리의 다른 글
Equasls, HashCode에 대해서 알아보자 (0) | 2022.12.06 |
---|---|
Hash에 대해서 알아보자 (0) | 2022.12.06 |
추상클래스 vs 인터페이스 (0) | 2022.09.01 |
call by value? call by reference? (0) | 2022.08.22 |
java Stream 참고 사이트 (0) | 2022.08.21 |