- 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)
비동기 작업을 하는 중
에에러가 발생
했을 때,결과 값
과에러
모두를 처리
하기 위한 용도