[CompletableFuture][#1] 정리시작

JAVA|2019. 7. 3. 18:30

업무상 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

 

(다음에는 각 의미를 알아보고 정리할 예정)

 

 

댓글()