- Java에서
비동기(Asynchronous) 프로그래밍을 가능케하는인터페이스Future을 통해서어느정도 가능했지만,콜백 정의처럼제한적인 것들이 있기에 이러한 것들을 극복함
- Future의 한계
외부에서Future을 완료시킬 수없었음-->취소,타임아웃 설정불가능- 항상 블로킹 코드(
get()) 뒤에콜백을 수행해야 했다
: 블로킹 코드(get())를 사용하지 않고서는결과의 보장이 되는 상황을특정할 수 없기 때문여러 Future를 조합해서사용할 수 없었다예외 처리용 API를 제공하지 않았다
- 특징
- 직접 쓰레드를 생성하지 않는다
--> 내부적으로ForkJoinPool.commonPool()의 쓰레드를 수행해서비동기 작업 수행
- runAsync(
Runnable)
반환(return)값이없는 경우
- supplyAsync(
Supplier)
반환(return)값이있는 경우
.thenApply(
Function)
비동기 로직이 수행된 후결과값을 받고,값을 반환(return)한다Function이니까입력값 1개/출력값 1개
.thenAccept(
Consumer)
비동기 로직이 수행된 후결과값을 받고,값을 반환(return)하지 않는다Consumer니까입력값 1개/출력값 0개
.thenRun(
Runnable)
비동기 로직이 수행된 후결과값을 받지 않고,값을 반환(return)하지도 않는다Runnable이니까입력값 0개/출력값 0개
thenCompose()
연관성이 있는 2개의 작업을처리할 때 사용해당 작업을 처리한 후결과를 받아서다음 비동기 작업을 처리할 때 사용
thenCombine()
연관성이 없는 2개의 작업을처리할 때 사용
allOf()
연관성이 없는 다수의 작업을수행할 때 사용각 작업의 반환(return)값이같다고 보장할 수 없기 때문에반환값을 가지지 않는다만약 모든 작업의 결과를ArrayList로 저장하려면 아래처럼결과 값에 접근해서 만들어야 한다
(에러처리의 복잡함때문에get()대신join()사용)![]()
anyOf()
연관성이 없는 다수의 작업들 중먼저 끝나는 하나가 있으면 종료하는 방식
exceptionally(Function)
비동기 작업을 하는 중에에러가 발생했을 때,에러를 처리하기 위한 용도
handle(BiFunction)
비동기 작업을 하는 중에에러가 발생했을 때,결과 값과에러모두를 처리하기 위한 용도