[CompletableFuture][#2] staticMethod
JAVA2019. 7. 9. 19:00
static 메서드를 어떤 동작들을 하는지 파악 및 정리해보았습니다.
일단 알아볼 CompletableFuture static메서드 종류는
- allOf
- anyOf
- completedFuture
- runAsync
- 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 메서드만 알아보았고
다음에는 일반 메서드들 및 내부에서 많이 사용하고 있는 메서드들을 주로 파악할 예정입니다.
'JAVA' 카테고리의 다른 글
[CompletableFuture][#3] 메소드 정리-1 (0) | 2019.09.01 |
---|---|
[Quartz] Trigger (0) | 2019.07.10 |
[CompletableFuture][#1] 정리시작 (0) | 2019.07.03 |
가끔 까먹는 비교 연산(IntegerCache, LongCache) (0) | 2019.07.03 |
[Quartz] CronExpression getNextInvalidTimeAfter (0) | 2019.07.02 |
댓글()