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 하나 공유 |
| 적합한 경우 | 단순 작업 | 네트워크 호출, 비동기 연산 | 컬렉션 필터링, 대량 데이터 집계 |