CompletableFuture,Future,ParallelStream

topics 300-백엔드개발 308 JAVA
types 이론 학습
tags

배경

batch등 대용량의 데이터를 처리하기 위해서는 병렬적으로 처리하는 비동기 작업이 필요했고 이에 따라 Java의 비동기, 논블로킹 객체를 사용하기 위해 조사

Future

내부적으로는 callable interface를 사용하여 비동기적으로 진행되나 get요청을 활용하여 결과를 얻기 위해서는 blocking이 발생함.
배치작업은 1작업이 진행될 동안 2작업이 병렬적으로 진행하는 것이 효율적이기에 blocking이 일어나면 대기시간이 길어짐.
그리고 get 요청을 하면 결과(결과를 반환하거나 에러를 반환)함.
즉 try catch 예외처리를 한번 더 감싸야함

CompletableFuture

콜백함수로 결과, 에러핸들링을 비동기적으로 할 수 있음
심지어 stream마냥 중

기능/도구 Future CompletableFuture ParallelStream
주 용도 단일 비동기 작업 복잡한 비동기 조합, 체이닝 대량 데이터 병렬처리
콜백/체이닝 불가 가능 불가
예외처리‧취소 일부 지원 강력 지원 일부 지원 (불편)
스레드풀 관리 직접 지정 지정가능 (ForkJoinPool 등) ForkJoinPool 하나 공유
적합한 경우 단순 작업 네트워크 호출, 비동기 연산 컬렉션 필터링, 대량 데이터 집계