PSD( Private-Self-Development )

CompletableFuture 본문

Backend/Thread

CompletableFuture

chjysm 2023. 7. 12. 15:02
  • 결과를 얻으려면 블로킹 방식으로  대기해야 한다
  • 외부에서 완료 시킬 수 없다
  • 여러 Future를 조합할 수 없다.
  • 여러 작업을 조합하거나 예외처리 할 수 없다.

이와 같은 Future 의 단점을 보완 하기 위해

JAVA 8  에 추가된 CompletableFuture 을 알아보자

 

 

CompletableFuture

  • Future 를 기반으로 외부에서 완료시킬 수 있도록 변경된 클래스
  • 작업들을 중첩시키거나 콜백 함수 추가 가능하다.

 

 

비동기 작업 실행

  • runAsync
    • 반환값이 없는 경우
    • 비동기로 작업 실행 콜
  • supplyAsync
    • 반환값이 있는 경우
    • 비동기로 작업 실행 콜

 

작업 콜백

  • thenApply
    • 반환 값을 받아서 다른 값을 반환함
    • 함수형 인터페이스 Function을 파라미터로 받음
  • thenAccpet
    • 반환 값을 받아 처리하고 값을 반환하지 않음
    • 함수형 인터페이스 Consumer를 파라미터로 받음
  • thenRun
    • 반환 값을 받지 않고 다른 작업을 실행함
    • 함수형 인터페이스 Runnable을 파라미터로 받음

 

작업 조합

  • thenCompose
    • 두 작업이 이어서 실행하도록 조합, 앞선 작업의 결과를 받아서 사용 가능
    • 함수형 인터페이스 Function을 파라미터로 받음
  • thenCombine
    • 두 작업을 독립적으로 실행하고, 둘 다 완료되었을 때 콜백을 실행
    • 함수형 인터페이스 Function을 파라미터로 받음
  • allOf
    • 여러 작업들을 동시에 실행하고, 모든 작업 결과에 콜백을 실행
  • anyOf
    • 여러 작업들 중에서 가장 빨리 끝난 하나의 결과에 콜백을 실행

 

예외 처리 

  • exeptionally
    • 발생한 에러를 받아서 예외를 처리
    • 함수형 인터페이스 Function을 파라미터로 받음
  • handle, handleAsync
    • (결과값, 에러)를 반환받아 에러가 발생한 경우와 아닌 경우 모두를 처리할 수 있음
    • 함수형 인터페이스 BiFunction을 파라미터로 받음

 

 


참조

https://mangkyu.tistory.com/263

'Backend > Thread' 카테고리의 다른 글

생산자 소비자 패턴  (2) 2024.08.28
BlockingQueue 와 DelayQueue  (0) 2024.08.26
Callable, Future, Executors, Executor, ExecutorService, ScheduledExecutorService  (0) 2023.07.12
Thread 와 Runnable  (0) 2023.07.11
Thread 란?  (0) 2022.11.15