[CompletableFuture][#1] 정리시작
업무상 JDK7까지 밖에 쓸수없어 이후 나온것들을.. 다 파악하지는 못하지만
블로그 및 세미나를 보며 흥미로운 항목중 CompletableFuture이 있었습니다.
가장 흥미로웠던 부분은 병렬처리 flow를 쉽게 개발할수 있게 해줄수 있겠다는것!
여기서 사용할 예는
RunA async실행 후 RunB1 RunB2 병렬 수행, RunC 실행 되는 케이스를 해보려고 한다.
그전에 클래스를 조금 살펴보면
Future와 CompletationStatge 인터페이스를 구현하고 있다.
Future는 지금까지 이해하고 사용하는 부분으로는 caller 쓰레드가 async 한 작업을 위해 다른 쓰레드에 일을 넘길경우 결과값 및 실행 종료 여부를 파악할수 있도록 사용하는 클래스로 생각해왔으며
결과값을 얻거나 일정 시간동안 결과값이 set 될때까지 대기하는 get(), get(time) 과
여부를 알수 있는 isDone() 등이 했다.
여기서 CompletationStatge는 처음 접한 인터페이스 인데 역시나 JDK8에 새로 추가된 인터페이스 였다.
선언 되어있는 메소드너무 많다..
thenApply(Function )
thenApplyAsync(Function )
thenAccept(Consumer)
thenAcceptAsync(Consumer)
thenRun(Runnable)
thenRunAsync(Runnable)
thenCombine(CompletaionStage, BiFunction)
thenCombineAsync(CompletaionStage, BiFunction)
thenAcceptBoth(CompletaionStage, BiConsumer)
thenAcceptBothAsync(CompletaionStage, BiConsumer)
...
handle(BiFunction)
handleAsync(BiFunction)
대부분 then** 인 만큼 앞에 작업을 수행후 수행할 작업들을 정의하는 것으로 파악 된다.
(다음에는 각 의미를 알아보고 정리할 예정)
CompletableFuture 는 다양한 static 메소드를 지원하여 다양한 방식을 지원
(하나의 runnable을 받아 async로 실행하거나, 특정 executor를 받는다던지, 여러 runnable을 받아 일괄로 실행한다던지)
allOf
anyOf
completedFuture
runAsync
supplyAsync
(다음에는 각 의미를 알아보고 정리할 예정)
'JAVA' 카테고리의 다른 글
[Quartz] Trigger (0) | 2019.07.10 |
---|---|
[CompletableFuture][#2] staticMethod (0) | 2019.07.09 |
가끔 까먹는 비교 연산(IntegerCache, LongCache) (0) | 2019.07.03 |
[Quartz] CronExpression getNextInvalidTimeAfter (0) | 2019.07.02 |
[RabbitMQ] 튜토리얼 1 "Hello World" (0) | 2013.10.22 |