CompletableFuture 6

Thread, Future, CompletableFuture 란

Thread 스레드가 하나인 경우를 싱글 스레드, 하나 이상인 경우를 멀티 스레드라 부른다. 멀티 스레드를 사용하면 애플리케이션에서 여러개의 작업을 동시에 할 수 있다. 멀티 스레드를 사용하면 스케쥴링 알고리즘에 의해 스레드가 전환되면서 작업을 처리하는데 이를 컨텍스트 스위칭이라 부른다. 하나의 프로세스에는 최소 하나 이상의 스레드가 존재하고 프로세스 내에 스레드들은 동일한 메모리를 공유한다. 스레드가 무한정 많아지면 메모리 사용량이 높아져 OOME 가 발생할 수 있고 동시 처리량을 요구하는 시스템에서는 스레드를 생성하면서 발생하는 대기 시간 때문에 응답 지연이 발생한다. 이러한 문제를 해결하기 위해 스레드 풀을 사용해야 한다. 스레드 풀을 사용하면 애플리케이션 내에서 사용할 총 스레드 수를 제한할 수..

Spring/Webflux 2024.01.27

토비의 봄 TV - CompletableFuture (7)

https://hyokeun0419.tistory.com/89 CompletableFuture (4) 자바에서 비동기(Asynchronous) 프로그래밍을 가능케하는 인터페이스이다. Future 인터페이스는 java5부터 java.util.concurrency 패키지에서 비동기의 결과값을 받는 용도로 사용했지만 비동기의 결과값 hyokeun0419.tistory.com https://hyokeun0419.tistory.com/90 CompletableFuture (5) 지난 시간에 이어 진행해보자. 이번엔 CompletableFuture 를 가지고 여러 작업을 조합하는 방법과 예외를 처리하는 방법에 대해 살펴보자. Future 만 가지고는 특정 작업들을 이어서 처리하는게 힘들었 hyokeun0419.ti..

Spring/Webflux 2022.06.28

CompletableFuture (3) - Callable 과 Future

Thread는 Runnable과 Callable의 구현된 함수를 수행한다는 공통점이 있지만, 다음과 같은 차이점이 있다. Runnable: 어떤 객체도 리턴하지 않습니다. Exception을 발생시키지 않습니다. Callable: 특정 타입의 객체를 리턴합니다. Exception을 발생킬 수 있습니다. Callable 이전까지 사용했던 Runnable과 유사하지만 작업의 결과(return) 를 받을 수 있다. Future Future 는 자바 1.5 에 등장한 비동기 계산 결과를 나타내는 인터페이스 비동기적인 작업의 현재 상태를 조회하거나 결과를 가져올 수 있다. Future를 이용하면 멀티쓰레드 환경에서 처리된 어떤 데이터를 다른 쓰레드에 전달할 수 있다. Future 내부적으로 Thread-Safe ..

CompletableFuture (5)

지난 시간에 이어 진행해보자. 이번엔 CompletableFuture 를 가지고 여러 작업을 조합하는 방법과 예외를 처리하는 방법에 대해 살펴보자. Future 만 가지고는 특정 작업들을 이어서 처리하는게 힘들었다. (예를들면, 이벤트 정보 가져온 다음 이벤트에 참석하는 회원 목록 가져오기 등.) 콜백을 줄 수 없었기 때문에 비동기적인 작업을 이어서 처리하기가 힘들었던 것이다. 조합하기 thenCompose( ) 두 작업이 서로 이어서 실행하도록 조합 public class CompletableFutureStudy { public static void main(String[] args) throws ExecutionException, InterruptedException { CompletableFutur..

CompletableFuture (4)

자바에서 비동기(Asynchronous) 프로그래밍을 가능케하는 인터페이스이다. Future 인터페이스는 java5부터 java.util.concurrency 패키지에서 비동기의 결과값을 받는 용도로 사용했지만 비동기의 결과값을 조합하거나, error를 핸들링할 수가 없었다. 자바8부터 CompletableFuture 인터페이스가 소개되었고, Future 인터페이스를 구현함과 동시에 CompletionStage 인터페이스를 구현한다. CompletionStage 는 비동기 연산 Step을 제공해서 계속 체이닝 형태로 조합이 가능하다. CompletionStage 란, 하나의 비동기 작업을 수행하고 완료가 되었을때 여기에 의존적으로 또 다른 작업을 수행할 수 있도록하는 명령들을 가지고있는 인터페이스 Fut..

CompletableFuture (1) - 자바 Concurrent 프로그래밍 소개

CompletableFuture 을 학습하려면 이전까지의 Java Concurrent 프로그래밍을 알아야한다. Concurrent 소프트웨어 동시에 여러 작업을 할 수 있는 소프트웨어 ex) 웹 브라우저로 유튜브를 보면서 키보드로 문서에 타이핑을 할 수 있다. ex) 녹화를 하면서 인텔리J로 코딩을 하고 워드에 적어둔 문서를 보거나 수정할 수 있다. Java 에서 지원하는 Concurrent 프로그래밍 멀티 프로세싱 (ProcessBuilder) 멀티 쓰레드 이번 시간에는 멀티 쓰레드에 관한것만 보자. Java 멀티 쓰레드 프로그래밍 Thread / Runnable 아래는 쓰레드를 구현하는 두가지 방법이다. 1. Thread 를 상속받아 구현하는 방법 // Thread 상속 public static vo..