[CompletableFuture][#2] staticMethod

JAVA|2019. 7. 9. 19:00

static 메서드를 어떤 동작들을 하는지 파악 및 정리해보았습니다.

 

일단 알아볼 CompletableFuture static메서드 종류는 

  1. allOf
  2. anyOf
  3. completedFuture
  4. runAsync
  5. supplyAsync

 

먼저 allOf(..)

allOf anyOf와 마찬가지로 여러 개의 CompletableFuture를 args로 받고 있습니다.

소스를 열어보면 설명이 친절하게 달려있습니다(물론 영어..).

필요한 부분 일부만 해석을 해보면..

allOf(..)는

  • CompletableFuture 객체(이제 cf 객체라 줄임)를 반환하며 반환한 cf 객체는 args로 주어진 cfs들이 모두 완료되면 completed 됩니다.
  • 그리고 args로 들어온 cfs 중에 예외가 발생한 경우 CompletaionException으로 감싸서(기존 에러는 cause로 담아) 마지막에 에러로 발생됩니다.//결국 에러를 cf의 응답으로 취급하여 모든 에러 혹은 결과를 기다림
  • 여러 개의 cf들을 다 기다릴 때 사용됩니다.
  • args가 없으면 바로 완료된 cf를 반환합니다.
  • [TODO] andTree 내부 구현을 보면 BiRelay 가 사용되고 있는데 다음에 살펴볼 예정입니다.

 

anyOf(..)는

  • 반환한 cf 객체는 args로 주어진 cfs들 중 어떤 것이라도 완료되면 completed 가 됩니다.
  • 그리고 args로 들어온 cfs 중에 예외가 발생한 경우 CompletaionException으로 감싸서(기존 에러는 cause로 담아) 바로 에러로 발생됩니다.//에러를 응답으로 취급, 응답이 왔기에 즉시 리턴
  • 여러 개 중 하나의 cf를 기다릴 때 사용됩니다..
  • args가 없으면 바로 완료되지 않은 cf를 반환
  • [TODO] 3개 중 2개를 기다려야 한다면 어떻게 해야 하지..?

completedFuture(value)는

  • arg value를 result 필드로 들고 있고 완료되어있는 cf 객체를 반환

runAsync(Runnable,@Optional Executor)는

  • async 하게 처리되고 있는 cf 객체를 반환하며(runnable이니 result는 null)
  • executor가 지정되어있지 않으면 ForkJoinPool을 통해 running 된다.
  • 내부 코드에서는 cf에 innerClass인 AsyncRun 사용

  • [TODO] java.util.concurrent.ForkJoinPool

 

supplyAsync(Runnable,@Optional Executor)는

 

  • async 하게 처리되고 있는 cf 객체를 반환하며(supplier를 받으니 result는 U )
  • executor가 지정되어있지 않으면 ForkJoinPool을 통해 running 됩니다.
  • 내부 코드에서는 cf에 innerClass인 AsyncSuppy 사용

 

이번에는 먼저 cf에 static 메서드만 알아보았고

다음에는 일반 메서드들 및 내부에서 많이 사용하고 있는 메서드들을 주로 파악할 예정입니다.

댓글()